我遇到了一些与现有url冲突的htaccess url重写规则。
-
将我的分类页面写入www.mydomain.com/categoryname.html
我使用以下规则,它运行良好,但我的所有其他页面,如www.mydomain.com/about.html显示404未找到
RewriteRule ^([^/]*).html$ /category_parent.php?ctg=$1 [L]
-
编写我的产品页面,如www.mydomain.com/25/productname.html
我正在使用以下代码,它也工作得很好
RewriteRule ^([^/]*)/([^/]*).html$ /product.php?id=$1&url=$2 [L]
但是上面的重写规则与我使用以下代码的子类别页面冲突:
RewriteRule ^([^/]*)/([^/]*).html$ /category_child.php?pctg=$1&ctg=$2 [L]
简而言之,我想写信给
www.mydomain.com/categoryname.html
www.mydomain.com/categoryname/subcategoryname.html
www.mydomain.com/25/productname.html
但有些规则相互干扰。如果你能给我一点线索,我将不胜感激。
如果您的文件从不存在的文件碰撞到现有的文件,则应使用一个条件来验证是否存在文件、目录或符号链接。
对于文件:
RewriteCond %{REQUEST_FILENAME} !-f
对于文件夹:
RewriteCond %{REQUEST_FILENAME} !-d
对于符号链接:
RewriteCond %{REQUEST_FILENAME} !-l
感叹号!
用于否定它们的含义!-f
表示如果文件不存在,则应用规则如果存在,则不应用规则。
请记住,RewriteCond
后面应该跟一个RewriteRule
,每个RewriteRule
可以有一个或多个条件,例如:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]*).html$ /category_parent.php?ctg=$1 [L]
在这种情况下,这意味着如果目录不存在,文件不存在,符号链接不存在,那么我们会重定向,但如果存在任何先前的条件,那么我们不会重定向。