繁体   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