[英]Redirect entire sub-directory to root directory
因此,我正在嘗試清理搜索引擎重定向錯誤。 我有一些舊的開發站點已被索引,我想將其重定向到主站點。
基本上,我希望/ 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做到這一點?
您可以在/dev/.htaccess
使用以下規則
RewriteEngine on
RewriteRule (.*) / [L,R=301]
上面的規則將所有請求從/dev
重定向到站點的根目錄,即。 /dev/*
=> /
包括從/dev?querystring
到/?querystring
。 默認情況下,mod-rewrite將舊查詢字符串附加到目標路徑,因此,如果您不希望使用它,則可以在規則中使用QSD
標志,也可以使用另一個規則來處理和刪除QUERY_STRING。
您可以使用以下規則將帶有和不帶有查詢字符串的URL重定向到/
。 ?
規則目標的末尾丟棄舊的查詢字符串。
RewriteEngine on
# redirect /dev?querystring to /
RewriteCond %{QUERY_STRING} .+
RewriteRule (.*) /? [L,R=301]
# redirect /dev/uri to /
RewriteRule (.*) / [L,R=301]
在測試這些重定向之前,請確保清除瀏覽器緩存。
您可能希望使用mod_alias
的RedirectMatch
指令來實現這種“簡單”的重定向,而不是使用mod_rewrite
。
RedirectMatch 301 "/dev/(.*)" "/$1"
請參閱https://httpd.apache.org/docs/2.4/mod/mod_alias.html上的文檔。
您將匹配結果留在此行中作為重定向的一部分:
RewriteRule ^(.*)$ /$1 [R=301,L]
特別是$1
作為/$1
(規則的重定向部分)的一部分。 由於此文件位於/dev
目錄中,因此它將自動刪除/dev/
然后將匹配項應用於重定向。 由於您將捕獲( $1
)用作規則的一部分,因此它將獲取/dev/
之后匹配的所有內容(在您的規則中,應將其讀取為^/dev/(.*)$
)並將其應用於/$1
,其中$1
是在上一步中的^(.*)$
中“找到”的值。
嘗試刪除模式匹配,例如:
RewriteRule ^(.*)$ / [R=301,L]
另外,由於您沒有使用匹配結果,因此可以刪除括號(例如^.*$
)。 您也可以將該.htaccess
文件放在根目錄中,然后根據要管理子目錄的方式將^/dev(/?.*)$
重定向到/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.