我正在尝试将 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 用户的帮助。谢谢, 亚尼潘
我正在尝试将 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 用户的帮助。谢谢, 亚尼潘
假设您所追求的是在请求的文件不存在时执行重定向(这通常会由服务器产生 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
上面的行对其进行测试。