Apache-2.2

301 僅將非文件系統請求重定向到新域

  • July 9, 2011

我想在 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]

雖然這會進行重定向,但它不會忽略伺服器上的實際文件和文件夾。

這是經過測試的解決方案:

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 行!-f!-d第 6 行末尾的 和 分別告訴 apache 避免將重定向應用到現有文件和目錄。

引用自:https://serverfault.com/questions/286456