301将category / category / index.php重定向到category / category.html

时间:2013-03-03 17:44:49

标签: apache .htaccess mod-rewrite http-status-code-301

我正在抨击键盘,无法弄清楚这一点,并且无法在谷歌上得到答案。

我有一堆旧的网址,我想要301重定向。例如,父/子* /index.php *必须成为父* /child.html *

这就是我写的:

RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)/index.php$ $1.html? [L,R=301]

没有请求发送到index.php,这就是我将第二个条件设为空的原因。 如果我在this Rewrite rule tester上测试它会失败,除非我手动填写request_URI值(参见上面的链接)

我将非常感谢任何帮助。如果我无法解决它,我将不得不手动执行Redirect 301 oldurl newurl,这将花费很长时间!

1 个答案:

答案 0 :(得分:0)

您可以在根目录下的一个.htaccess文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  ^/([^/]+)/([^/]+)/index\.php/? [NC]
RewriteRule .*             /%1/%2.html                [R=301,L]

无声地映射

http://example.com/parent/child/index.php

http://example.com/parent/child.html

假设字符串parentchild是可变的,而假设index.php是固定的。

对于静音映射,将[R = 301,L]替换为[L]

这适用于真实的服务器。但是,您可以在没有%{REQUEST_FILENAME}条件的情况下对其进行测试here,该测试网站不支持。