Apache-2.2
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]
雖然這會進行重定向,但它不會忽略伺服器上的實際文件和文件夾。
這是經過測試的解決方案:
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 避免將重定向應用到現有文件和目錄。