.htaccess 重定向太多次

Posted

技术标签:

【中文标题】.htaccess 重定向太多次【英文标题】:.htaccess redirects too many times 【发布时间】:2022-01-14 22:29:35 【问题描述】:

我已经为子域编写了一个 .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]

【问题讨论】:

你想要什么? 从这个 htaccess 代码中得到这个错误:这个页面不工作 URL 重定向你太多次了。 【参考方案1】:

问题很可能是最顶层的重定向。它实现了一个重定向循环。也不清楚它实际上是什么意思......这里的“子域”是什么?主机名/子域名?所以像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协议,这实际上是现在的标准。

【讨论】:

循环没有在子域中中断 请给出一个详细的解释,你想用那个规则重写哪个 URL。目前尚不清楚您实际上要做什么...【参考方案2】:
RewriteCond %SERVER_PORT 80
RewriteRule ^(.*)$ http://subdomain/$1 [R,L]

您实际上并没有说明您要做什么。但是,像这样检查 SERVER_PORT 的端口 80 的唯一原因是,如果您要重定向到 HTTPS(端口 443)。但是您正在重定向到 HTTP(端口 80) - 所以这自然会导致重定向循环。

您需要将 substitution 字符串中的 http 更改为 https。例如:

RewriteCond %SERVER_PORT 80
RewriteRule (.*) https://subdomain/$1 [R=301,L]

(最终,这应该是一个 301 永久重定向,一旦您确认它按预期工作。)

或者,如果您不打算强制使用 HTTPS(但您应该这样做),请完全删除这些指令。


RewriteRule ^ http://subdomain/404 [L,R]

并在最后一条规则中更改为https。 (但是,您不应该首先重定向到“404”错误文档。)

【讨论】:

以上是关于.htaccess 重定向太多次的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress https '重定向你太多次了。错误

htaccess 重定向 + 在 url 中隐藏子文件夹

本地主机页面不工作。 localhost 将您重定向了太多次

PHP 站点在 XAMPP 中运行良好,但在 linux 上重定向太多次

通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com

当我使用锁屏特征时,Laravel 5.7 重定向太多次