这个htaccess代码有什么作用?

时间:2014-04-05 20:06:21

标签: apache .htaccess

我不熟悉htaccess代码。有人能告诉我这段代码的作用吗?它弄乱了PIWIK跟踪界面。并且不确定它是否也一直在搞乱跟踪代码,因为网站访问者像苍蝇一样掉线。

RewriteCond %{REQUEST_URI} !^/download
RewriteCond %{REQUEST_URI} !^/image
RewriteCond %{REQUEST_URI} !^/media
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) /${lc:$1} [R=301,L]

1 个答案:

答案 0 :(得分:3)

该规则在单独的情况下将接受任何URI输入并将其强制为小写,然后重定向到较低级的URI。

http://example.com/Path/To/A-CAPS-URL会被重定向到http://example.com/path/to/a-caps-url

(.*)将整个输入URI捕获到$1

/${lc:$1}最有可能(按文档和惯例)通过$1将捕获的URI从tolower发送到内部函数RewriteMap

Here are the relevant Apache docs展示了此功能。

但是,如上所述RewriteRule.htaccess中没有其他规则)可能无法正常运行。在它之前没有RewriteCond来匹配大写字符,它将导致无限重定向循环。


针对完整重写规则进行了更新:

查看完整的重写集,条件会强制重定向到/download, /image, /media开头的任何网址的底层版本,因为这三个条件都被{ {1}}。仅当输入URI中传递了大写字母时,条件匹配!才会强制执行重定向(因为否则无需重定向)。

如果这导致Piwik中的跟踪问题,可能是因为Piwik跟踪URI与其中一个条件匹配,并且被重定向远离它可以正常运行的位置。

考虑添加另一个条件以防止Piwik被重写。例如,如果跟踪器为[A-Z],您可以使用:

/piwik.php

最后,如果您没有在任何地方定义# Don't mess with anything in piwik... RewriteCond %{REQUEST_URI} !piwik # Combined the others into one... RewriteCond %{REQUEST_URI} !^/(download|image|media) RewriteCond %{REQUEST_URI} [A-Z] RewriteRule (.*) /${lc:$1} [R=301,L] ,则RewriteMap不太可能按预期强制执行小写。确保您的${lc:$1}的定义与链接文档中的示例类似。