所以我正在尝试清理搜索引擎重定向错误。我有一些旧的开发站点被索引,我想重定向到主站点。
基本上我希望/ dev /文件夹中的所有内容都转到https://myfakewebsite.com/
我将此添加到/ dev /目录中的.htaccess文件:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ /$1 [R=301,L]
我尝试了这个但它不能正常工作,它确实取出了/ dev /但它保留了其余的链接。
例如:https://myfakewebsite.com/dev/index.php?route=product/category&path=122
重定向到:https://myfakewebsite.com/index.php?route=product/category&path=122
我希望它重定向到:https://myfakewebsite.com/(删除/index.php?route=product/category&path=122部分)。
有没有办法用.htaccess做到这一点?
答案 0 :(得分:1)
您可以在/dev/.htaccess
RewriteEngine on
RewriteRule (.*) / [L,R=301]
上述规则将所有请求从/dev
重定向到网站的根目录,即。 /dev/*
=> /
包括/dev?querystring
到/?querystring
的查询字符串。默认情况下,mod-rewrite将旧查询字符串附加到目标路径,因此如果您不想要它,则可以在规则中使用QSD
标志,或者您可以使用其他规则来处理和删除QUERY_STRING。
您可以使用以下规则将包含和不包含查询字符串的网址重定向到/
。规则末尾的?
会丢弃旧的查询字符串。
RewriteEngine on
# redirect /dev?querystring to /
RewriteCond %{QUERY_STRING} .+
RewriteRule (.*) /? [L,R=301]
# redirect /dev/uri to /
RewriteRule (.*) / [L,R=301]
确保在测试这些重定向之前清除浏览器缓存。
答案 1 :(得分:0)
您可能希望使用RedirectMatch
中的mod_alias
指令实现此类“琐碎”重定向,而不是使用mod_rewrite
执行此操作。
RedirectMatch 301 "/dev/(.*)" "/$1"
请参阅https://httpd.apache.org/docs/2.4/mod/mod_alias.html上的文档。
答案 2 :(得分:0)
您将匹配结果保留为此行重定向的一部分:
RewriteRule ^(.*)$ /$1 [R=301,L]
具体为$1
,作为/$1
(规则的重定向部分)的一部分。由于此文件位于/dev
目录中,因此会自动删除/dev/
,然后将匹配应用于重定向。由于您使用捕获($1
)作为规则的一部分,因此它会在/dev/
之后(在您的规则中将其读作^/dev/(.*)$
)和将其应用于/$1
,其中$1
无论发现什么""在上一步^(.*)$
期间。
尝试删除模式匹配,例如:
RewriteRule ^(.*)$ / [R=301,L]
此外,由于您没有使用匹配结果,因此您可以删除括号(例如^.*$
)。您也可以将此.htaccess
文件放在根目录中,只需将^/dev(/?.*)$
重定向到/
,具体取决于您希望如何管理子目录。