Mod_rewrite,301s和斜杠

时间:2012-02-06 13:03:23

标签: .htaccess mod-rewrite http-status-code-301

我想在虚拟目录上设置一个漂亮的URL。但我也想要一个虚拟目录的安全网,以防万一有人直接点击它。我们调用虚拟目录foo

RewriteRule ^foo/(.*)$ ./foo/page.php?term=$1 [QSA]

这似乎工作正常。所有页面都正确地重定向和显示,漂亮的URL保留在地址栏中(而不是像301那样重定向到物理地址)

但如果我去www.domain.com/foo,我会得到404 :(

如果我访问www.domain.com/foo/(请注意斜杠),脚本会继续运行,并且由于我的PHP中有一些额外的验证,会显示错误消息。

如何整理虚拟目录(有/没有斜杠)?没有人应该打,但如果他们这样做,我想做好准备,并将他们重新指向主页。

阅读another users question后,我尝试了:

Redirect 301 /foo /?q=empty

但这与我最初的规则相矛盾。我最终得到的链接如下: www.domain.com/?q=empty/Blah(而不​​是/ foo / Blah)

2 个答案:

答案 0 :(得分:0)

试试这个:

RewriteCond %{REQUEST_URI} ^foo/$ 
RewriteRule ^  /foo/page.php?q=empty [L,QSA]

RewriteRule ^foo/(.*)$ foo/page.php?term=$1 [L,QSA]

答案 1 :(得分:0)

只需为此案例添加额外规则

RewriteRule ^foo/?$ ./foo/page.php [QSA, L]