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

.htaccess 重写与现有文件冲突的规则,.htaccess,url-rewriting,.htaccess,Url Rewriting,我遇到了一些htaccess url重写规则,这些规则与现有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.ht

我遇到了一些htaccess url重写规则,这些规则与现有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]
    

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

    prix,感谢您的回复,因为我已经告诉过您,我给出的htaccess代码工作正常,只是与其他代码冲突。就像我在www.mydomain.com/categoryname.html中使用了你的代码一样,它也可以正常工作,但是在www.mydomain.com/about.html中我找不到404。@prototype about.html页面是否存在,或者应该放在其他地方?
    RewriteCond%{REQUEST_FILENAME}-f
    使用此条件,如果文件存在,规则将不会重写它。@Prix:不,它没有。否则,这同样适用于
    \w
    搜索
    下面的任何“单词”字符
    ,它会记录哪些字符符合条件以及何时符合条件。仅当您已将unicode模式设为Endable时。是否有(也有基于US-ASCII的签出URI规范)?启用重写日志。通过显示重写日志的内容来显示正在发生的重写。还显示了错误日志中的404。如果您想轻松重写,请将所有不存在的文件/文件夹重写到单个PHP页面,并在该PHP页面内解析请求URL并委托给正确的脚本(前端控制器)。