Php htaccess重定向到https所有页面(一个页面除外)

Php htaccess重定向到https所有页面(一个页面除外),php,apache,.htaccess,redirect,yii,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

我正在使用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上,它会重定向到 我的代码如下:

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
非常感谢您的帮助

谢谢

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


可能是因为你的Yii控制器。在请求被路由到
index.php
控制器之后,您需要防止再次重定向。将此添加到最顶端(重定向之前):

您希望删除第二个重定向的“https”部分(并且您可能也不需要
!-f
!-d
检查):


可能是因为你的Yii控制器。在请求被路由到
index.php
控制器之后,您需要防止再次重定向。将此添加到最顶端(重定向之前):


我很难接近

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

获得规则我对htaccess很糟糕

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

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

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

这对你来说很有用:

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

这将对您有用:

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

这是一个打字错误,我没有https,即使没有它也无法工作-f和-D我编辑了我的问题。@kromol wait,
/clip/create
是实际存在的目录吗?@kromol和
重写规则。php
rule,这是Yii需要的东西,对吗?它不仅仅是从其他地方复制粘贴的?因为我将这些规则添加到一个空白的htaccess文件中,它工作正常。
/clip/create
不是目录。它是有动作的控制器。有一个文件
ClipController.php
,它有一个名为
actionCreate
@kromol Dunno的函数。然后,如果我在顶部包含
RewriteRule index\.php-[L]
,一切正常,就像我删除那行时你说的那样。不知道为什么它仍然对你不起作用,但对我很好。可能不是htaccess规则在做重定向。这是一个输入错误,我没有https,即使没有它也无法工作-f和-D我编辑了我的问题。@kromol wait,
/clip/create
是实际存在的目录吗?@kromol和
重写规则。php
rule,这是Yii需要的东西,对吗?它不仅仅是从其他地方复制粘贴的?因为我将这些规则添加到一个空白的htaccess文件中,它工作正常。
/clip/create
不是目录。它是有动作的控制器。有一个文件
ClipController.php
,它有一个名为
actionCreate
@kromol Dunno的函数。然后,如果我在顶部包含
RewriteRule index\.php-[L]
,一切正常,就像我删除那行时你说的那样。不知道为什么它仍然对你不起作用,但对我很好。也许不是htaccess规则在进行重定向。