2010-01-16 32 views
12

下面是代码我目前在我的.htaccess文件:我知道重写插孔的.htaccess 301重定向所有HTTPS访问http除了一个PAGE

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

...和所有的其他职位上这个主题实际上不符合我的标准,我对这门语言的尝试和解密还不够了解。

基本上我需要的是这样的:

  1. 重定向的所有实例 “example.com” 到 “www.example.com”
  2. 重定向“HTTPS //www.example所有实例.com“改为”http://www.example.com“,但1页 !!!! (万一它很重要,该页面的文件名是payments.php)

我有上面的代码工作,但对于我需要为https的1页,它重写URL为http。那一页必须是https。

谢谢, 克里斯

+0

谢谢大家的意见! Chris – dell116 2010-01-16 23:02:53

回答

10

的Apache/2.2.6(Win32的)的mod_ssl/2.2.8的OpenSSL/0.9.8g PHP/5.2.6

我本地测试它,所有的用例似乎很好地工作。如果您还有其他问题,请随时询问。

# Rewrite Rules for example.com 
RewriteEngine On 
RewriteBase/

# Redirect from example.com to www.example.com 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# Turn SSL on for payments 
RewriteCond %{HTTPS} off 
RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

# Turn SSL off everything but payments 
RewriteCond %{HTTPS} on 
RewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

重要!当用户从任何HTTPS页面WWW导航到任何HTTPS页面而不WWW,他要求接受你的非www域名的安全证书。

例如(YES =请求接受该证书,NO - 对面):我试图重新排序规则在.htaccess没有成功

1) https://www.asdf.com/payments.php - YES (www.asdf.com) 
2) http://www.asdf.com/phpinfo.php - NO 
3) https://asdf.com/phpinfo.php - YES (asdf.com) 
4) https://www.asdf.com/phpinfo.php - NO 

。如果有人找到更好的解决方案,将不胜感激。

+0

谢谢!它完美的作品。与此同时,我想再读一点这类东西。你有什么好的建议吗? – dell116 2010-01-16 23:05:55

+1

你可以随时阅读手册;)http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html – 2010-01-16 23:10:51

-1
# Rewrite Rules for example.com 
RewriteEngine On 
RewriteBase/

# Redirect from example.com to www.example.com 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# Disable SSL on pages other than payments.php 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^payments\.php$ 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# Require SSL on payments.php 
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^payments\.php$ 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

我没有测试过,但这样的事情应该工作

编辑:更新

+0

这仍然允许所有其他页面都是https(不会将它们重写为http)。 这不会将http://www.example.com/payments.php改写为https://www.example.com/payments.php 第一个重定向仍然有效。 我看到你在.....,它看起来是正确的....它只是不工作。任何其他想法? 谢谢, Chris – dell116 2010-01-16 22:15:53

+0

我已经调整了一下你的代码。但是,有一个问题需要接受example.com和www.example.com证书。 – 2010-01-16 22:39:07

5

除了威廉的伟大的解决方案,你可以否定在https重写代码前某处请求uri

RewriteCond %{REQUEST_URI} !^/?payments\.php 
+0

这确实是适当的解决方案。 – dotancohen 2014-12-29 09:15:51

0

这是一个不错的职位,似乎重定向到正常访问http但是我要像下面

一些事情
RewriteCond %{HTTP_HOST} ^site\.com 
RewriteRule (.*) http://www.site.com/$1 [R=301,L] 

#RewriteCond %{SERVER_PORT} !^443$ 
#RewriteRule ^products https://www.site.com/products/ [R=301,L] 

# Disable SSL on pages other than payments.php 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^products 
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L] 

# Require SSL on payments.php 
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^products\/?$ 
RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L] 


RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.gif) 
RewriteRule ^(.*)$ index.php/$1 [L] 

我的网址是http://www.sitename.com和后正斜杠是可选 我需要的是,如果有是同类产品没有内容的网址,然后它需要他访问http:// ,如果有一个字符串产品的URI,那么它应该是https://开头

该怎么做...... 当我尝试它是一个循环...重定向循环。

我使用codeigniter框架工作,我已经从url中删除index.php。

所以如果像http://sitename.com/products发生的话,我想这是https://sitename.com/products

,如果有在URL中没有的产品,那么它应该重定向到http://

相关问题