我遇到了一些与现有网址冲突的htaccess网址重写规则。
将我的类别页面写入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
但有些规则相互搞乱。如果你能为我提供一些线索,我将不胜感激。
答案 0 :(得分:0)
如果您的文件与不存在的文件发生冲突,则应使用条件来验证文件,目录或符号链接是否存在。
对于文件:
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]
在这种情况下,它意味着如果目录不存在且文件不存在且符号链接不存在,那么我们重定向但如果存在任何先前条件,则我们不会重定向。