.htaccess 重定向匹配301以更改URL的一部分
以前的错误留下了坏链接,我正试图用301重定向匹配来清理我的混乱 正确的URL格式如下:.htaccess 重定向匹配301以更改URL的一部分,.htaccess,url,mod-rewrite,redirect,url-redirection,.htaccess,Url,Mod Rewrite,Redirect,Url Redirection,以前的错误留下了坏链接,我正试图用301重定向匹配来清理我的混乱 正确的URL格式如下: http://www.example.com/aaa-directory/page http://www.example.com/bbb-directory/page http://www.example.com/ccc-directory/page (等等) 但是,以前存在链接到以下位置的页面的错误链接: http://www.example.com/aaa-directory//page http:/
http://www.example.com/aaa-directory/page
http://www.example.com/bbb-directory/page
http://www.example.com/ccc-directory/page
(等等)
但是,以前存在链接到以下位置的页面的错误链接:
http://www.example.com/aaa-directory//page
http://www.example.com/bbb-directory//page
http://www.example.com/ccc-directory//page
(双反斜杠//何时应为单反斜杠/)
我已经修复了坏链接,但我仍然会得到外部链接和/或机器人爬网,这些链接会指向那些坏的URL
我想使用RedirectMatch 301,这样任何文本为“-directory/
”的链接都将重定向到与“-directory/
”相同的链接
所以,http://www.example.com/ccc-directory//page
将被重定向到:
http://www.example.com/ccc-directory/page
我正在努力学习语法。任何帮助都将不胜感激
(不确定是否需要,但我当前的HTACCESS文件如下所示):
在内部重写规则之前保留重定向规则,并有另一个规则需要处理
/
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S*) [NC]
RewriteRule ^ %1%2 [R=301,L,NE]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
谢谢,但不太管用。如果我进入www.example.com/aaa-directory//page,就会看到一个相当奇怪的url,如下所示:。那个奇怪的URL至少把双反斜杠改成了单反斜杠…所以我们可能正在取得进展?还有什么建议吗?@anubhava一如既往,对你的Apache规则知识印象深刻。对社区来说,这是一笔惊人的财富@杰克·古尔德:非常感谢你的客气话。@anubhava太棒了!工作起来很有魅力。非常感谢你。非常感谢你的帮助!
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S*) [NC]
RewriteRule ^ %1%2 [R=301,L,NE]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]