[英].htaccess redirects too many times
我已經為子域編寫了 .htaccess,但它重定向了太多次。
我的完整代碼看起來像
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://subdomain/$1 [R,L]
RewriteEngine On
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^404/?$ /404.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://subdomain/404 [L,R]
問題很可能是最頂層的重定向。 它實現了一個重定向循環。 也不清楚它實際上是什么意思......這里的“子域”是什么? 主機名/子域名? 所以像http://sub.example.com/$1
這樣的東西?
假設您由同一個 http 服務器提供服務的所有“子域”,您需要添加一個額外的條件來打破這種外觀:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HOST_NAME} !^sub\.example\.com$
RewriteRule ^(.*)$ http://sub.example.com/$1 [R,L]
這也可以簡化為:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HOST_NAME} !^sub\.example\.com$
RewriteRule ^ http://sub.example.com%{REQUEST_URI} [R,L]
還可以考慮使用加密的 https 協議,這實際上是這些天的標准。
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ http://subdomain/$1 [R,L]
您實際上並沒有說明您要做什么。 但是,像這樣檢查端口80
的SERVER_PORT
的唯一原因是,如果您要重定向到 HTTPS(端口 443)。 但是您正在重定向到 HTTP(端口 80) - 所以這自然會導致重定向循環。
您需要將替換字符串中的http
更改為https
。 例如:
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://subdomain/$1 [R=301,L]
(最終,這應該是 301永久重定向,一旦您確認它按預期工作。)
或者,完全刪除這些指令。
RewriteRule ^ http://subdomain/404 [L,R]
並在最后一條規則中更改為https
。 (但最后兩條規則相當愚蠢。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.