我有一个mod_rewrite规则,用于将不存在的目录定向到php文件,该文件根据$ 1执行数据库获取。
一切正常,除非目录确实存在,它显示正确的目录,但它也会在不需要时附加查询字符串。
过去几个小时我一直在网上搜索并尝试不同的方法而没有运气。
有谁知道如何保持这种功能原样,但摆脱查询字符串?
非常感谢。
这是我的代码:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z\-]+)/$ $1 [R]
RewriteRule ^([0-9a-zA-Z\-]+)$ product.php?product=$1
最终发生的事情是浏览器将网址显示为http://domain.com/existing_dir/?product=existing_dir
答案 0 :(得分:2)
尝试一下,它会自行删除/
而不重复整个过程
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/?$ product.php?product=$1
如果你坚持限制特殊字符,那就可以:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z\-]+?)/?$ product.php?product=$1
+
是一次或多次重复,*
为0或更多,+?
,*?
是不饥饿匹配的修饰符 - 它允许/?
匹配任何东西
另外在你的例子中,第一个RewriteRule是有条件地执行的(当目录不存在时),第二个一直执行(如果第一个不会破坏进程),所以即使目录存在
答案 1 :(得分:0)
Mod_rewrite不会影响查询字符串,除非您告诉mod_rewrite有一个空查询字符串,否则它将始终标记在新URL的末尾。这是通过添加一个?在新字符串的末尾。所以第一行应该是这样的:
RewriteRule ^([0-9a-zA-Z\-]+)/$ $1? [R]