htaccess重定向到https除了一个以外的所有页面

时间:2013-09-27 21:44:42

标签: php apache .htaccess redirect yii

我正在使用Yii框架。我想将网站上的所有网页从HTTP重定向到HTTPS,但 domain.com/clip/create 除外。

以下代码将所有网页重定向到HTTPS:

RewriteEngine on
RewriteCond %{HTTPS} !^on$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

我修改了该代码以便为一个页面添加异常,但它无法正常工作。 它适用于网站上的所有网页,但在地址 domain.com/clip/create 上,它会重定向到 https://domain.com/index.php 我的代码如下:

RewriteEngine on

RewriteCond %{HTTPS} !^on$
RewriteCond %{REQUEST_URI} !^/clip/create
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

RewriteCond %{HTTPS} ^on$
RewriteCond %{REQUEST_URI} ^/clip/create
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R,L]    

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

非常感谢任何帮助。

由于

4 个答案:

答案 0 :(得分:1)

您想删除第二次重定向的“https”部分,(您可能也不需要进行!-f!-d检查):

RewriteCond %{HTTPS} ^on$
RewriteCond %{REQUEST_URI} ^/clip/create
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R,L]    
# no "s" here ---------^

这可能是因为你的Yii控制器。在将请求路由到index.php控制器之后,您需要阻止另一个重定向。将其添加到最顶层(重定向之前):

RewriteRule index\.php - [L]

答案 1 :(得分:0)

我对htaccess非常糟糕

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/clip/create [OR]
RewriteRule ^/directory(.*)$ https://%{HTTP_HOST}/directory$1 [L,R]

here获得规则

答案 2 :(得分:0)

清除浏览器缓存!当我在HTTP和HTTPS之间切换连接类型时,我遇到了很多这些问题,然后经过大量的搜索和尝试,我发现Firefox和chrome缓存了301和302错误代码。

答案 3 :(得分:0)

这对你有用:

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php