我不熟悉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]
答案 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}
的定义与链接文档中的示例类似。