2016-07-08 2 views
0

SSLを使用して1つのページmysubdir/checkout.phpを保護したいと考えています。例: https://www.mywebsite.com/fr/checkoutfrは言語コードです。URLリライト - 1ページを除いてHTTPにリダイレクト

他のすべてのページはhttpにリダイレクトする必要があります。

これは私が.htaccessで持っているものですが、動作しません。

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

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

##### Checkout ##### 
RewriteRule ^/(fr|en)/checkout/?$ mysubdir/checkout.php?lang=$1 [QSA] 

しかし、私が入った時:https://www.mywebsite.com/fr/checkoutそれはhttps://www.mywebsite.com/mysubdir/checkout.php?lang=frにリダイレクトします。どうして?

この問題に対する解決策はありますか?

答えて

0

試してみてください。

RewriteEngine on 
#redirect checkout.php from http to https 
RewriteCond %{HTTPS} off 
RewriteRule checkout\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R] 
#redirect all requests except "checkout.php" from https to http 
RewriteCond %{HTTPS} on 
RewriteRule !checkout\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R] 

はこれが唯一の/checkout.php httpsにリダイレクトします。

+0

私の場合、checkout.phpも/ fr/checkoutに書き換えられます。 – sc1013

+0

何が問題なのですか?他のルールやhtaccessはありますか? – starkeen

0

REQUEST_URIではなくREQUEST_URIの代わりにTHE_REQUEST変数を使用してください。最後にREQUEST_URIが変更されています。

RewriteEngine On 

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

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

##### Checkout ##### 
RewriteRule ^/?(fr|en)/checkout/?$ mysubdir/checkout.php?lang=$1 [QSA,L,NC] 

これはテスト時にブラウザのキャッシュをクリアするようにしてください。

関連する問題