【问题标题】:Simple .htaccess RewriteRule not working简单的 .htaccess RewriteRule 不起作用
【发布时间】:2016-05-19 15:36:48
【问题描述】:

不知道为什么这不起作用:

RewriteEngine On

RewriteCond %{HTTP_HOST} example.com$ [NC]
RewriteRule ^.+ http://example.com [L]

据我所知,RewriteCond 正在工作。

对我来说,RewriteRule 写道:

  • ^开始比赛
  • .+ 一个或多个字符

然而,Firefox 44 告诉我

页面重定向不正确

Firefox 检测到服务器正在重定向请求 这个地址永远不会完成。

如果RewriteRule^.* 开头,我预计服务器会陷入无限循环。

但是^.+ 应该可以工作,不是吗?

【问题讨论】:

  • 这是因为 example.com 正在重定向到 example.com
  • 同意。但这就是您对^.* 的期望,不是吗?为什么^.+ 会发生这种情况?
  • 不,条件是这样。
  • 啊,好吧。那么我该如何声明一个或多个字符(不是零个或多个字符)?
  • 这正是您的规则所做的,但条件是如果域以example.com 结尾,则必须进行重写并且,根据规则,还有一个请求 URI 中的字符。这样做的目的是什么?

标签: apache .htaccess mod-rewrite


【解决方案1】:

由于在 REQUEST_URI 中添加了 DirectoryIndex 处理程序,您将获得重定向循环。

要解决此问题,您可以使用以下规则:

RewriteCond %{HTTP_HOST} www.localhost$ [NC]
RewriteCond %{REQUEST_URI} !^/index\. [NC]
RewriteRule ^.+ http://www.localhost [L,R]

RewriteCond %{REQUEST_URI} !^/index\. [NC] 将停止重定向循环,因为/index.html/index.php 通常是DirectoryIndex 处理程序。

【讨论】:

  • 这是非常好的知识,@anubhava。一个要记住的。真的非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多