0

我正在尝试将 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 用户的帮助。谢谢, 亚尼潘

4

1 回答 1

2

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

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

这样做的意思是,如果请求的文件名不是文件或目录,那么我们将把请求重写为路径名的第一部分,.html并附加到它上面。

比如请求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上面的行对其进行测试。

于 2013-08-07T12:28:24.573 回答