如何让浏览器在重写时显示干净的URL?

时间:2010-06-28 21:54:38

标签: apache .htaccess mod-rewrite url-rewriting

我有一个如下所示的超链接:

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]

提前致谢,

约翰

1 个答案:

答案 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指令。

如果您将重写规则放在虚拟主机或主配置中,只要请求主机和重写规则中的主机匹配,就不会出现这种情况。