这是我的整个.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。但是我还是想知道到底出了什么问题。
答案 0 :(得分:1)
view
会与view.php
文件发生冲突。
在htaccess中使用Options -MultiViews
禁用它。
答案 1 :(得分:0)
我认为这是您使用(.+?)
的地方 - 尝试仅使用(.+)
答案 2 :(得分:-1)
你可以像这个视图一样在视图之后转义斜杠/但我不确定是否能解决问题,因为斜杠是一个路径分隔符。所以我认为你想要实现的目标会更好地做到这样的规则:
RewriteRule ^(.+\/)(.+\/)$ page.php?p=$1&id=$2
然后你将page.php中的页面包含在一个简单的php include($ _ GET ['p']);