2015-05-19 233 views
2

我試圖將單個WordPress頁面(/scheduling/)重定向到HTTPS,同時在所有其他頁面上強制使用HTTP。在這個主題上有很多類似的帖子,但是我的具體用例由於某種原因而不起作用。思考?將單頁重定向到HTTPS,其餘的重定向到HTTP

的.htaccess

# 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 

RewriteEngine On 
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^scheduling/ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^scheduling/ 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

以上是正確重定向所有其他網頁被重定向到每當請求httpshttp,但沒有做任何事情都爲scheduling/頁面。

回答

1
  1. 在默認WP規則之前重定向。
  2. 使用THE_REQUEST變量而不是REQUEST_URI

您可以使用:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
RewriteCond %{THE_REQUEST} /scheduling [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteCond %{HTTPS} on 
RewriteCond %{THE_REQUEST} !/scheduling [NC] 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 
+2

感謝您的幫助。快速提問:爲什麼'REQUEST_URI'不能在這種情況下工作?它不只是返回'THE_REQUEST'的一個子集?人,我需要改進我的Apache foo ... – rnevius

+2

因爲'REQUEST_URI'的值在執行其他規則之後改變,而'THE_REQUEST'不是這種情況。 – anubhava

+1

感謝您的信息! – rnevius