簡體   English   中英

將整個子目錄重定向到根目錄

[英]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_aliasRedirectMatch指令來實現這種“簡單”的重定向,而不是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM