url rewrite - 重定向到除一个页面之外的HTTP

时间:2016-07-08 05:38:53

标签: php .htaccess url-rewriting

我希望使用SSL保护一个页面mysubdir/checkout.php。 例如https://www.mywebsite.com/fr/checkout,其中fr是语言代码。

应将所有其他页面重定向回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。为什么呢?

对此有任何解决方案吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您应该使用THE_REQUEST变量而不是REQUEST_URI,因为您的上一次将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]

确保在测试时清除浏览器缓存。