我想在 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
指令重定向请求。您可以使用指令将此设置为文件存在RewriteCond
。mod_rewrite 文档或许是一个不错的起点。