301仅将非文件系统请求redirect到新域

我想在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文档可能是一个很好的开始。