我试图将重写规则的重写条件添加到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
答案 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
行进行测试。