14

首先,我想删除 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

当它应该转到https://example/login时,导航到http://example/login仍然转到http://example/index.php我的顺序是否错误?

4

4 回答 4

31

试试这些规则:

# 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 请求的协议。

于 2010-11-16T14:49:11.033 回答
4

这段代码对我有用:

<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>
于 2016-09-10T08:27:34.690 回答
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]
于 2010-11-16T14:30:58.750 回答
0

在阅读了所有发布时间线后,我因以下错误而成功:我的网站(c4dprime.com)已附加 https:在 mozilla firefox 浏览器中。Google 和 Internet Explorer 将域地址显示为 http:(firefox 中的真正问题)我不希望 https:在任何浏览器中用于我的域,因为一个未知的重定向通过 https 附加到我的域:(导致此错误)后安装以下wordpress 中的插件,(ssl 的简单重定向).... 我已经告诉每个人不要为 wordpress 使用任何低级插件。

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

这个提示对我很有帮助

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

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

AddHandler c4d-prime .com

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteBase /
RewriteRule ^$ http://www.c4dprime.com/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
于 2016-02-23T11:56:05.940 回答