2015-08-17 151 views
55

請不要推薦我帶有超過173個upvotes的long and very detailed thread。它不適合我。我也嘗試了很多其他的(1234)。他們都讓我TOO_MANY_REDIRECTS或錯誤500。所以,這裏是我的問題:使用.htaccess將HTTP重定向到HTTP

從我目前的.htaccess,這是發生了什麼:

https://www.dukescasino.com/ - 完美的作品

https://dukescasino.com/ - 重定向到其上方是偉大的

兩個以下負載選項罰款,但應重定向到HTTPS版本:

http://www.dukescasino.com/

http://dukescasino.com/

這是當前的.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

我不認爲這是相關的,但即便如此,這裏是當前活躍的插件列表:

  • 高級定製域
  • All In One SEO包
  • Bop搜索框項目類型For導航菜單
  • 聯繫表7
  • 禁用評論
  • 谷歌的XML的Sitemaps
  • 的Jetpack採用WordPress。COM
  • 搜索&篩選
  • 滑塊WD
  • TablePress
  • UpdraftPlus - 備份/恢復
  • Wordfence安全
  • WPide
  • WP斯馬什
  • 可溼性粉劑超高速緩存

編輯1 - 測試執行:

試驗A:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
# First rewrite to HTTPS: 
# Don't put www. here. If it is already there it will be included, if not 
# the subsequent rule will catch it. 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
# Now, rewrite any request to the wrong domain to use www. 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

結果: ERR_TOO_MANY_REDIRECTS

試驗B:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

結果: ERR_TOO_MANY_REDIRECTS

試驗C:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

結果: ERR_TOO_MANY_REDIRECTS

試驗d:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

結果: ERR_TOO_MANY_REDIRECTS

測試E:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

結果:發現302。此外,嘗試使用ErrorDocument處理請求時遇到500內部服務器錯誤錯誤。

+0

也許只是一個錯字,但是你拼寫'.htaccess'錯誤(同樣的方式)3次?您當前的.htaccess文件不完整,您缺少'RewriteEngine On'指令。大概,當你添加規範重定向時,你將這個添加到你的.htaccess文件的最頂部?你聲明'https:// example.com'重定向好,但是,這不是在你的配置文件中指出的?這是怎麼發生的?知道你實際嘗試過的東西是有用的 - 這是行不通的。 – MrWhite

+0

對不起,.htaccess是一個錯字,我現在修復了。我還更新了當前的.htaccess代碼以及我對每個結果所做的所有測試。我不知道沒有www的https如何重定向到https:// www版本。謝謝 –

+0

您通常會期望設置服務器變量「HTTPS」(否則您的結果會顯示)。你是否支持代理? (測試E很可能會導致某種「遞歸」的404?) – MrWhite

回答

58

問題解決了!

最後的.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{ENV:HTTPS} !=on 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+15

對於我在Dreamhost上託管的網域,此更改導致「[www.domain.com]重定向您太​​多次了」。沒有運氣。 然而,這工作: 的RewriteCond%{} HTTPS = ON 重寫規則^ HTTPS://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301] –

+0

這給了我'太多redirects'上Godaddy的。 –

+10

我不得不改變'RewriteCond'到下面的一個以避免'太多重定向':'RewriteCond%{HTTPS}!= on' – lucaferrario

97

Dreamhost上,這個工作:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+5

這也適用於一個普通的非Dreamhost服務器 – icc97

+0

這一個是在namecheap共享主機上爲我工作。 –

+0

這工作在siteground wordpress安裝。 – Gere

1

我發現這個問答&一個沒有工作對我來說,不幸中列出的所有解決方案。做什麼工作是:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

# add a trailing slash to /wp-admin 
RewriteRule ^wp-admin$ wp-admin/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
RewriteRule ^(wp-(content|admin|includes).*) $1 [L] 
RewriteRule ^(.*\.php)$ $1 [L] 
RewriteRule . index.php [L] 

RewriteCond %{HTTP_HOST} ^example\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L] 
</IfModule> 
# End Wordpress 

請注意,上述的WordPress的規則是在多用戶網絡模式的Wordpress。如果你的WordPress是在單點模式下,你可以使用:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteCond %{HTTP_HOST} ^example\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L] 
</IfModule> 
# End Wordpress 
11

它爲我的作品:

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

# END WordPress 
6

在我的情況下,htaccess文件包含大量的插件安裝像遙遠的未來規則到期WPSuperCache以及wordpress本身的行。

爲了不把事情搞得一團糟,我不得不把該解決方案在htaccess的頂端(這是很重要的,如果你把它在最後它會導致一些錯誤的重定向由於與緩存插件衝突)

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
</IfModule> 

這樣,你的線不會被wordpress弄亂,以防一些設置改變。此外,<IfModule>部分可以重複沒有任何問題。我要感謝Jason Shah整潔htaccess rule

+0

這是必不可少的信息。感謝您發佈它! –

0

以上都不適用於我。但是,這些線路解決了同樣的問題在我的WordPress網站:

RewriteEngine On 

RewriteCond %{HTTP:HTTPS} !on 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
0

這裏是一個替代的解決方案,如果你不希望編輯.htaccess你可以使用:

add_action('template_redirect', 'nonhttps_template_redirect', 1); 

function nonhttps_template_redirect() { 

    if (is_ssl()) { 

     if (0 === strpos($_SERVER['REQUEST_URI'], 'https')) { 

      wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301); 

      exit(); 

     } else { 

      wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301); 

      exit(); 

     } 

    } 

} 

你可以在這個地方你的主題的底部functions.php

+0

你知道這對谷歌索引是怎麼影響的? –

+0

還不完全確定,我的猜測是它將保持不變,這取決於Google可能會將它作爲HTTPS版本的起始索引。 –

-1

只需添加此代碼,它會像魅力:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC] 
    RewriteRule^http%2://%1%{REQUEST_URI} [R=301,L] 
</IfModule> 
0

這是測試,使用安全

當您編輯在永久設置的東西,所以這將是相同的代碼(沒有衝突

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

<IfModule mod_rewrite.c> 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] 
</IfModule> 

注:你必須更改WordPress地址 & 網站地址網址https://常規設置也(wp-admin/options-general.php

+0

WordPress部分應該在HTTPS之後,否則將無法工作。或者,至少,這是發生在我身上:) –

+0

感謝您的信息! – l2aelba

0

在WordPress添加這種.htaccess文件:

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC] 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC] 

因此默認的WordPress的.htaccess文件應該是這樣的:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC] 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC] 
</IfModule> 
0

以上決賽。 htaccess和測試A,B,C,D,E沒有爲我工作。我只是用下面兩行代碼,並在我的WordPress網站的工作原理:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L] 

我不知道我在那裏做了錯誤,但此頁幫我擺脫困境。

0
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTPS} !=on 
    RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^digitalsoftwaremarket.com [NC] 
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301] 
</IfModule> 
0

easyest方式來重定向HTTP到HTTPS在WordPress的它來修改SITE_URL和家庭從http://example.comhttps://example.com。 WordPress的將做重定向。 (這就是爲什麼你得到「太多重定向」的錯誤,wordpress重定向到http而.htaccess將重定向到https)

+0

我不確定它是否做SEO的任何重定向:) – jcdarocha

+1

當然確實。重定向301(永久),谷歌將重新索引 – Rafael

2

爲了您的信息,它真的取決於您的託管服務提供商。

在我的情況下(Infomaniak),沒有任何上述實際工作,我有無限的重定向循環。

做到這一點,正確的方法是actually explained in their support site

RewriteEngine on 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule (.*) https://your-domain.com/$1 [R=301,L] 

所以,始終與您的託管服務提供商。希望他們有一篇文章解釋如何做到這一點。否則,只需要支持。

相關問題