有谁知道为什么以下规则明显改变了浏览器的地址栏?我不想要它。
RewriteCond %{QUERY_STRING} (module)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2? [NE]
应该采用类似
的网址/模块/视频/ item12345 /?模块= 67890
并执行内部重定向到
/ module / video / 123456 / module67890(即将查询字符串语法转换为目录语法)
重定向发生,但可见的URL被换出。
有什么想法?这很烦人......提前谢谢
答案 0 :(得分:0)
发表评论后,这里是.htaccess
的复制粘贴:
RewriteEngine on
Options +FollowSymLinks
# ------ force trailing slashes
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]
# ------ remove duplicate slashes
RewriteCond %{THE_REQUEST} \ (.*)//+(.*)\ [NC]
RewriteRule .* %1/%2 [R=301,L]
# ------ site-specific redirect rules...
RewriteCond %{QUERY_STRING} (module)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2? [NE]
RewriteCond %{QUERY_STRING} (ITEM_ENT_ID)=([^&]*)&(?:amp;)?.*(FILE_SERVICE_CONF_ID)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2/%3%4$2? [NE]
RewriteCond %{QUERY_STRING} (ITEM_ENT_ID)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2$2? [NE]
只有一个重定向(=唯一改变URL的部分),它就在这里:
# ------ remove duplicate slashes
RewriteCond %{THE_REQUEST} \ (.*)//+(.*)\ [NC]
RewriteRule .* %1/%2 [R=301,L]
所以我的猜测是,即使这个RewriteRule只被验证一次,也有一个在客户端可见的重定向。
如果我是对的,请告诉我。
如果您不在托管环境中(=如果它是您自己的服务器并且您可以修改虚拟主机,而不仅仅是.htaccess
文件),请尝试使用RewriteLog
指令:它帮助您追踪此类问题:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
我最喜欢检查regexp的工具:
http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)