我想在Apache服务器上使用.htaccess来只将调用redirect到文件系统中不是文件或文件夹的服务器。 例如,如果服务器收到以下请求:
http://www.domain.tld/page1.html
而page1.html不是服务器上的实际文件,它应该301redirect到:
http://new.domain.tld/page1.html
否则,它不应该做任何事情。 这可能吗? 如果是这样,怎么样? 请尽可能提供一些示例代码。 我现在的代码是:
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC] Rewriterule ^(.*)$ http://subdomain.newdomain.tld/$1 [L,R=301]
虽然这样做的redirect,它不会忽略服务器上的实际文件和文件夹。
以下是testing的解决scheme:
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和!-d分别表示apache避免将redirect应用于现有的文件和目录。
你可以使用Apache的mod_rewrite来实现这个function,它允许你使用RewriteRule指令redirect请求。 您可以在使用RewriteCond指令存在的文件上设置这个条件。 mod_rewrite文档可能是一个很好的开始。