.htaccess 重写与现有文件冲突的规则
我遇到了一些htaccess url重写规则,这些规则与现有url冲突.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
RewriteRule ^([^/]*)\.html$ /category_parent.php?ctg=$1 [L]
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并委托给正确的脚本(前端控制器)。