我正在抨击键盘,无法弄清楚这一点,并且无法在谷歌上得到答案。
我有一堆旧的网址,我想要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
,这将花费很长时间!
答案 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
假设字符串parent
和child
是可变的,而假设index.php
是固定的。
对于静音映射,将[R = 301,L]替换为[L]
这适用于真实的服务器。但是,您可以在没有%{REQUEST_FILENAME}
条件的情况下对其进行测试here,该测试网站不支持。