重写与现有文件冲突的规则



我遇到了一些与现有url冲突的htaccess url重写规则。

  1. 将我的分类页面写入www.mydomain.com/categoryname.html

    我使用以下规则,它运行良好,但我的所有其他页面,如www.mydomain.com/about.html显示404未找到

    RewriteRule ^([^/]*).html$ /category_parent.php?ctg=$1 [L]
    
  2. 编写我的产品页面,如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]

在这种情况下,这意味着如果目录不存在,文件不存在,符号链接不存在,那么我们会重定向,但如果存在任何先前的条件,那么我们不会重定向。

最新更新