.htaccess 除非目录存在,否则mod_将重写为php文件

.htaccess 除非目录存在,否则mod_将重写为php文件,.htaccess,mod-rewrite,query-string,.htaccess,Mod Rewrite,Query String,我有一个mod_重写规则,用于将不存在的目录定向到一个php文件,该文件是数据库基于$1获取的 除非目录确实存在(显示正确的目录),否则一切正常,但在不需要时,它还会追加查询字符串 在过去的几个小时里,我一直在搜索网页,尝试不同的方法,但都没有成功 有没有人知道如何保持这个功能不变,但去掉查询字符串 多谢 这是我的密码: RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteCond %{REQUEST_FI

我有一个mod_重写规则,用于将不存在的目录定向到一个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

最终的结果是浏览器将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]

谢谢,第二个例子非常有效。我知道这个周末我在读什么。