使用.htaccess从http重定向到https而不使用www

时间:2015-03-02 16:02:00

标签: php apache .htaccess mod-rewrite

我有基于PHP和Apache的应用程序。如果请求的链接不是目录或文件,则所有请求都将转到index.php文件。我想将所有请求从http重定向到https而没有www。

对我有用的链接:

  1. https://someaddress.org
  2. 从以下链接开始对我无效(抱歉,我的声誉非常小,而且我无法发布更多2个链接):

    1. 的http://
    2. http://www
    3. 万维网。
    4. 我的htaccess看起来像那样

      AddDefaultCharset UTF-8
      
      RewriteEngine on
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*) index.php [L]
      

      我如何重定向到https而没有www?

3 个答案:

答案 0 :(得分:0)

http->httpwww删除的其他规则:

AddDefaultCharset UTF-8

RewriteEngine on
RewriteBase /

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://someaddress.org%{REQUEST_URI} [L,NE,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

答案 1 :(得分:0)

您可以使用SSLRequireSSL指令覆盖http到https部分。

<Directory />
  SSLRequireSSL
</Directory>

如果问题是htaccess文件而不是重写规则,则可以停止使用.htaccess文件并将重写规则移至apache配置文件。

如果您只是不想要或者可以使用重写规则,并且由于绝大多数php应用程序需要每个脚本中包含的配置文件(配置变量或用户控件作为示例),您可以使用此文件来获取所请求的资源剥去www。部分,如果域名以它们开头。

如果包含文件可能是您需要的解决方案,我可以提供php代码示例。

答案 2 :(得分:0)

首先将所有带有WWW的请求重定向到没有WWW的https

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

现在将所有不带WWW的http请求重定向到不带WWWW的https

# For http://yourdomain.com
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} ^yourdomain\.com [NC]
RewriteRule ^(.*)$ https://yourdomain.com/$1 [L,R=301]

依次在.htacess文件中依次添加上述代码,以将所有请求重定向到没有www的https

我使用“ R = 301”进行永久重定向