删除www站点范围,在某些目录上强制https,在其余目录上删除http?

时间:2010-11-16 10:01:52

标签: .htaccess mod-rewrite ssl https no-www

首先,我想删除www。来自我的域名

http://www.example.com => http://example.com

我还希望某些目录是安全的(https),而其余目录仍然是http

http://example.com/login => https://example.com/login

显然,它需要适用于所有条件,例如,如果有人输入:

http://www.example.com/login => https://example.com/login

当人们离开登录页面时,它返回到http。目前在.htaccess中是由我正在使用的软件自动完成的,我想它需要在那里工作:

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

关于如何实现梦想控制所有这些事情的任何想法?

提前致谢!

===================

@Gumbo根据你的建议,这是我完整的.htaccess

RewriteEngine On


# remove www from host
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

# force HTTPS
RewriteCond %{HTTPS} =off
RewriteRule ^(login)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force HTTP
RewriteCond %{HTTPS} =on
RewriteRule !^(login)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


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


Options -Indexes

导航到http://example/login时仍然会转到http://example/index.php它应该转到https://example/login我的订单是否错误?

4 个答案:

答案 0 :(得分:26)

请尝试以下规则:

# remove www from host
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

# force HTTPS
RewriteCond %{HTTPS} =off
RewriteRule ^(login|foo|bar|…)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force HTTP
RewriteCond %{HTTPS} =on
RewriteRule !^(login|foo|bar|…)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

您可能还想添加一些其他条件,以仅更改GET和HEAD请求上的协议,但不会更改POST请求。

答案 1 :(得分:2)

此代码适用于我:

<IfModule mod_rewrite.c>

   RewriteEngine on

   RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
   RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

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

</IfModule>

答案 2 :(得分:0)

删除www(已测试):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://yoursite.com/$1 [L,R=301]

重定向(未测试):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \/login/?.*\ HTTP [NC]
RewriteRule ^(.*)$ https://yoursite.com/login [L,R=301]

答案 3 :(得分:0)

阅读完所有发布时间后,我已成功跟踪错误:我的网站(c4dprime.com)附加了https:在mozilla firefox浏览器中。谷歌和互联网探索显示域名地址为http :( firefox中的真正问题)我不想要https:对于我的域在任何浏览器中,因为一个未知的重定向与我的域附加https :(导致此错误)安装后wordpress中的插件,(轻松重定向ssl)....我告诉每个人不要使用任何低级插件的wordpress。

反正!通过谷歌搜索引擎阅读了这个主题的许多文章和教程。现在我很高兴地说我已经从这个帖子提示解决了这个问题。请记住关于我的一件事我是这个形式和wordpress的新手。

这个提示对我来说很有帮助

import org.apache.spark.sql.functions._
val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet")
//val coder: (Int => String) = (arg: Int) => {if (arg < 100) "little" else "big"}
//val sqlfunc = udf(coder)
myDF.selectExpr("Code", "case when Amt < 100 'little' else 'big' end ")

编辑或我的.htaccess文件中的一些更改后,我现在使用的代码已解决此错误。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://yoursite.com/$1 [L,R=301]