将整个子目录重定向到根目录

时间:2018-04-13 22:58:45

标签: php .htaccess redirect

所以我正在尝试清理搜索引擎重定向错误。我有一些旧的开发站点被索引,我想重定向到主站点。

基本上我希望/ 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做到这一点?

3 个答案:

答案 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(/?.*)$重定向到/,具体取决于您希望如何管理子目录。