【问题标题】:Remove www site-wide, force https on certain directories and http on the rest?删除 www 站点范围,在某些目录上强制 https 并在其余目录上强制 http?
【发布时间】:2011-05-10 17:27:23
【问题描述】:

首先,我想删除 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 我的顺序有误吗?

【问题讨论】:

  • 嗯,^(login|foo|bar|…)$ 只是匹配loginfoobar 等的一个示例。
  • 是的,我明白了,我只用 ^(login)$ 尝试过,但仍然表现出相同的行为

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


【解决方案1】:

此代码适用于我:

<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】:

    在阅读完所有发布时间线后,我因以下错误而成功:我的网站(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
    

    【讨论】:

    • 对于任何报告/问题/建议,您可以通过 shahidabbas2001@gmail.com 与我联系
    【解决方案3】:

    试试这些规则:

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

    【讨论】:

    • 古腾标签秋葵汤!好的,我认为我们正在取得进展。使用上述规则,包括最初在 .htaccess 中的规则,删除 www。适用于所有情况。但是导航到 http://mydomain.com/login 它转到 http://mydomain/index.php
    • @Anthony:作为一般规则,将那些导致外部重定向的规则放在那些只会导致内部重写的规则之前。否则,您可以获得已在内部重写的外部重定向请求。
    • 我编辑了我的原始帖子,让您更好地了解我正在使用的内容。
    • @Gumbo 第一部分(“从主机中删除 www”)将在任何域上工作,而无需更改 .htaccess?它还会从 http 和 https 请求中去除 www 吗?
    • @Gumbo 哇,太好了 :) 我第一次看到一个考虑到 HTTP 和 HTTPS 且无需“硬编码”域名的解决方案。
    【解决方案4】:

    删除 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]
    

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2012-07-11
      • 2014-02-20
      • 2016-07-05
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多