Mod_Rewrite强制所有文件上的HTTP除一个

时间:2009-07-25 23:33:18

标签: apache http mod-rewrite ssl https

很抱歉,如果之前有人询问,但我找不到它。 我有一个文件夹,当我访问HTTPS和HTTP中的加载时。

我希望该文件夹中的所有文件都在HTTP中加载,但一个文件除外。 我在HTTPS中需要的文件是:login.php,这个文件夹叫做“forum”。 如果它有帮助:文件夹中的所有文件都是* .php。

我正在尝试以下方面:

#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^/login.php$ - [L]

#RewriteCond %{SERVER_PORT} ^443$
#RewriteRule ^(/login.php) $ https://%{HTTP_HOST}/$1 [QSA,NC,R,L]

#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [QSA,NC,R,L]

当谈到mod_rewrite时,我有点像业余爱好,所以如果以上内容完全关闭,请原谅我。 此外,如果你发布一个解决方案,如果你发布一个解释,我会很感激,所以我实际上可以了解它是如何工作的。

提前致谢! 大卫

2 个答案:

答案 0 :(得分:1)

尝试一下:

 Options +FollowSymLinks
 RewriteEngine On


 # port 443 traffic to http://, except login.php
 RewriteCond %{SERVER_PORT} ^443$
 RewriteCond %{REQUEST_URI} !^/login\.php$ [NC]
 RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 # port 80 traffic for login.php to https://
 RewriteCond %{SERVER_PORT} ^80$
 RewriteCond %{REQUEST_URI} ^/login\.php$ [NC]
 RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案 1 :(得分:0)

请尝试以下规则:

RewriteCond %{SERVER_PORT} !=443
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{SERVER_PORT} !=80
RewriteRule !^login\.php$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]