仅在进一步条件下匹配404

时间:2013-08-07 09:17:38

标签: regex .htaccess mod-rewrite

我试图将重写规则的重写条件添加到404条件。 例如:

 only if (404)
 http://www.MyDomain.com/category_name/item_name.html
 then:
 http://www.MyDomain.com/category_name.html [L,R=301]

我设法做了简单的重定向,但没有设法检测错误情况...... 真的很感谢更有经验的mod_rewrite用户的帮助。 谢谢, Yanipan

1 个答案:

答案 0 :(得分:2)

假设您所追求的是在请求的文件不存在(通常由服务器产生404)的情况下执行重定向,那么实际上这很简单:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule $([^/]*)/.+$ /$1.html [L,R=301]

这样做是说,如果请求的文件名不是文件或目录,那么我们将把请求重写为路径名的第一部分,并附加.html。< / p>

例如,请求http://example.com/some_cat/an_item.html,如果文件an_item.html不存在,此请求将被重写为:http://example.com/some_cat.html

请注意,这也将在子目录中生效,例如,请求http://example.com/some_cat/things/an_item.html将导致与上述示例相同的URI。


要理解的重要一点是导致404错误的原因。理解这一点的最简单方法是请求是针对不存在的项目,可以使用上面的RewriteCond行进行测试。