301 仅将非文件系统请求重定向到新域

301 仅将非文件系统请求重定向到新域

我想在 Apache 服务器上使用 .htaccess 仅将文件系统中非文件或文件夹的调用重定向到服务器。例如,如果服务器收到以下请求:

http://www.domain.tld/page1.html

而且page1.html不是服务器上的实际文件,它应该301重定向到:

http://new.domain.tld/page1.html

否则,它不应该做任何事情。这可能吗?如果可以,怎么做?如果可能,请提供一些示例代码。我目前拥有的代码是:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
Rewriterule ^(.*)$ http://subdomain.newdomain.tld/$1 [L,R=301]

虽然这会进行重定向,但它不会忽略服务器上的实际文件和文件夹。

答案1

这是经过测试的解决方案:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC,OR]
RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*)$ http://subdomain.newdomain.tld/$1 [L,R=301]

第 3 行和第 4 行告诉 apache,无论请求是否带有 www,都应用规则,而不考虑大小写字母。第5 行和第 6 行末尾的!-f和分别告诉 apache 避免将重定向应用到现有文件和目录。!-d

答案2

您可以使用 Apache 的 来执行此操作mod_rewrite,它允许您使用RewriteRule指令重定向请求。您可以使用指令将此设置为文件存在RewriteCondmod_rewrite 文档或许是一个不错的起点。

相关内容