我有一个如下所示的超链接:
http://domain.com/sample/comments/65
当我点击它时,它会转到:
http://domain.com/sample/comments/index.php?submissionid=65
我正在使用重写规则来实现此目的。这就是我想要的,除了我还希望浏览器中显示的URL仍然看起来像“http://domain.com/sample/comments/65”。
我该怎么做? .htaccess文件显示在下面。
RewriteEngine on
RewriteRule ^comments/([0-9]+)?$ http://domain.com/sample/comments/index.php?submissionid=$1 [NC,L]
提前致谢,
约翰
答案 0 :(得分:1)
您必须删除部分http://domain.com/sample/
,否则会强制重定向:
RewriteEngine on
RewriteRule ^comments/([0-9]+)?$ comments/index.php?submissionid=$1 [NC,L,B]
B
标志也是必要的,因为您在查询字符串中使用了反向引用,这需要转义。
manual说(强调我的):
在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)会自动删除以进行模式匹配,并在替换完成后自动添加。此功能对于许多类型的重写至关重要;如果没有这个,你总是必须匹配父目录,这并不总是可行的。 有一个例外:如果替换字符串以http://开头,则不会添加目录前缀,并强制使用外部重定向(或代理吞吐量,如果使用标志P)。有关更多信息,请参阅RewriteBase指令。
如果您将重写规则放在虚拟主机或主配置中,只要请求主机和重写规则中的主机匹配,就不会出现这种情况。