2017-04-01 109 views
0

我重新開發一個WordPress站點和站點結構發生了變化急劇,所以我需要在.htaccess執行從舊網址和力HTTPS重定向文件。301 .htaccess文件重定向和的mod_rewrite規則導致重定向鏈(WordPress的)

我遇到的問題是,我的代碼會產生連續兩次301重定向,我需要將它們合併成1 301重定向。

下面是.htaccess文件:

重定向個人網頁到新網址:

Redirect 301 "/old-site-url-1" "/new-site-url-1" 
Redirect 301 "/old-site-url-2" "/new-site-url-2」 
Redirect 301 "/old-site-url-3" "/new-site-url-3」 

全局重定向所有請求,以便使用https://

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

結果這是重定向鏈:

301 - HTTP:// MYDOMAIN /老站點URL-1(舊網站非SSL)

301 - https://開頭MYDOMAIN /老站點URL-1(MOD-重寫規則力量的https://)

200 - https://開頭MYDOMAIN /新站點-url-1(301重定向踢和新的URL被發現)

我要整合兩個301重定向到一個。

有沒有什麼辦法可以使用Flags(https://httpd.apache.org/docs/2.4/rewrite/flags.html)或其他來跳過強制SSL指令並將301重定向切換爲絕對URL使用HTTPS?

重寫規則301重定向之前總是被處理。有什麼辦法推遲它,然後測試頁面是否已經使用HTTPS?

回答

0

的問題是,你混合MOD-別名(重定向指令)與國防部重寫(重寫規則)。它們是兩個不同模塊的一部分。 mod-rewrite總是在mod-alias之前運行。您需要使用rewriteRule而不是Redirect指令處理舊請求。將下列規則添加後你要跟SSL重定向規則或#wp規則之前:

RewriteRule ^old-path-1/?$ https://example.com/new-path-1 [L,R] 
RewriteRule ^old-path-2/?$ https://example.com/new-path-2 [L,R]