我在使用UwAmp,Apache / 2.2.22 PHP版本5.3.25的localhost上。站点位于虚拟主机中。一切都工作100%,直到我想执行没有尾随削减政策。政策措辞奇怪:
# enforce no trailing/
RedirectMatch 301 ^(.+)/$ $1
^^重定向匹配适用于我尝试过的所有请求,但mod
或mod/
除外。
例如:ip:port / aaaa工作,但ip:port / mod或ip:port / mod / loops infinitly
我已禁用以前的RedirectMatch并尝试使用纯mod_rewrite:
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
同样的事情。除了/ mod或/ mod /
之外,所有请求都按预期工作我已经从.htaccess清除了一切,只留下了这两个条件中的一个,但是奇怪的行为仍然存在。
第一:为什么会这样?第二:知道怎么解决吗? 我会提供更多数据,只需说明您需要的信息。
EDIT1: 刚刚检查过,所有虚拟主机上都存在同样的问题,没有斜杠策略 edit2:不,有一个网站,有相同的设置,但没有/甚至在mod上工作:(
答案 0 :(得分:1)
由于mod
是现有文件夹,因此看起来这是一个目录斜杠问题。
使用Apache,您可以通过在root htaccess中添加此行来禁用它(在顶部,它很好)。
DirectorySlash Off
但您也可以在<IfModule mod_rewrite.c>
块中添加它
这样,如果启用了mod_rewrite
,它将被禁用 (这意味着由于您的规则没有斜杠)。这实际上是最好/最干净的解决方案。
注意:我没有看到使用它的任何缺点,除非您有一个文件(例如,没有扩展名)和一个文件夹,两者共享相同的名称。