首页 文章

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

提问于
浏览
0

我遇到了一些与现有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

但有些规则相互搞乱 . 如果你能为我提供一些线索,我将不胜感激 .

1 回答

  • 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]
    

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

相关问题