簡體   English   中英

.htaccess 重定向次數過多

[英].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]

您實際上並沒有說明您要做什么。 但是,像這樣檢查端口80SERVER_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM