.htaccess 除非目录存在,否则mod_将重写为php文件
我有一个mod_重写规则,用于将不存在的目录定向到一个php文件,该文件是数据库基于$1获取的 除非目录确实存在(显示正确的目录),否则一切正常,但在不需要时,它还会追加查询字符串 在过去的几个小时里,我一直在搜索网页,尝试不同的方法,但都没有成功 有没有人知道如何保持这个功能不变,但去掉查询字符串 多谢 这是我的密码:.htaccess 除非目录存在,否则mod_将重写为php文件,.htaccess,mod-rewrite,query-string,.htaccess,Mod Rewrite,Query String,我有一个mod_重写规则,用于将不存在的目录定向到一个php文件,该文件是数据库基于$1获取的 除非目录确实存在(显示正确的目录),否则一切正常,但在不需要时,它还会追加查询字符串 在过去的几个小时里,我一直在搜索网页,尝试不同的方法,但都没有成功 有没有人知道如何保持这个功能不变,但去掉查询字符串 多谢 这是我的密码: RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteCond %{REQUEST_FI
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
最终的结果是浏览器将URL显示为尝试一下,它自己删除
/
,而不重复整个过程
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/?$ product.php?product=$1
如果您坚持限制特殊字符,则可以:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z\-]+?)/?$ product.php?product=$1
+
是1个或多个重复,*
是0个或多个,+?
,*?
是不需要匹配的修饰符-它允许/?
匹配任何内容
此外,在您的示例中,第一个重写规则是有条件执行的(当目录不存在时),第二个规则总是执行(如果第一个规则不会中断进程),因此即使目录存在,Mod_rewrite也不会影响查询字符串,除非您告诉mod_rewrite使用空查询字符串,否则它将始终标记在新URL的末尾。这是通过添加一个?在新字符串的末尾。所以第一行应该是这样的:
RewriteRule ^([0-9a-zA-Z\-]+)/$ $1? [R]
谢谢,第二个例子非常有效。我知道这个周末我在读什么。