.htaccess:如何处理RewriteRule中的斜杠(/)?

时间:2011-12-26 18:47:59

标签: .htaccess mod-rewrite

这是我的整个.htaccess:

RewriteEngine On
RewriteBase /~user/sitetest/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ view.php?id=$1

当我访问http://localhost/~user/sitetest/abc123时,它会加载$ _GET [“id”]值,一切正常。太棒了!

但我想让它在http://localhost/~user/sitetest/view/abc123工作(注意“查看/”)

所以我尝试将RewriteRule替换为:

 RewriteRule ^view/(.+?)/?$ view.php?id=$1

但无济于事!它似乎没有从view.php加载$ _GET []。我甚至尝试回显$ _GET []值,但当我访问http://localhost/~user/sitetest/view/abc123时它显示为空白

所以我编辑它以查看是否可行:

RewriteRule ^view-(.+?)/?$ view.php?id=$1

我访问http://localhost/~user/sitetest/view-abc123时会注意到(注意“ - ”而不是“/”)

那么它与斜杠有什么关系?我迷失了,一直在努力解决这个问题。

修改

我仍然遇到问题,但是当我尝试时我注意到了:

 RewriteRule ^test/(.+)/?$ view.php?id=$1

访问http://localhost/~user/sitetest/test/abc123它有效! 所以似乎与“view.php”和“view /”有冲突。所以在最坏的情况下我会重命名view.php。但是我还是想知道到底出了什么问题。

3 个答案:

答案 0 :(得分:1)

如果启用了MultiViews,请求的网址中的

view会与view.php文件发生冲突。

在htaccess中使用Options -MultiViews禁用它。

答案 1 :(得分:0)

我认为这是您使用(.+?)的地方 - 尝试仅使用(.+)

答案 2 :(得分:-1)

你可以像这个视图一样在视图之后转义斜杠/但我不确定是否能解决问题,因为斜杠是一个路径分隔符。所以我认为你想要实现的目标会更好地做到这样的规则:

RewriteRule ^(.+\/)(.+\/)$ page.php?p=$1&id=$2

然后你将page.php中的页面包含在一个简单的php include($ _ GET ['p']);