将HTTPS强制添加到我的.htaccess文件中

时间:2017-11-10 12:03:07

标签: apache .htaccess mod-rewrite

我有一个.htaccess文件,其中包含一些正在执行某些操作的重写,这些工作正常。它看起来像这样:

<IfModule mod_rewrite.c>

Options +FollowSymLinks

RewriteEngine On

# Removes .php ending from path
# ---------------

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]

# Services & Knowledgebase rewrites
# ---------------

RewriteRule ^services/([a-zA-Z0-9-/]+)/([a-zA-Z0-9-/]+)$ /services.php?cat=$1&s=$2 [L]
RewriteRule ^services/([a-zA-Z0-9-/]+)$ /services.php?service=$1 [L]

RewriteRule ^knowledge-base/([a-zA-Z0-9-/]+)/([a-zA-Z0-9-/]+)$ /knowledge-base.php?cat=$1&s=$2 [L]
RewriteRule ^knowledge-base/([a-zA-Z0-9-/]+)$ /knowledge-base.php?cat=$1 [L]

</IfModule> 

我现在已经向网站添加了SSL,并且需要为整个网站强制使用HTTPS。我尝试将以下内容添加到.htaccess

# Force HTTPS
# ---------------

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteEngine On语句之后,当我尝试example.com时,网址仍为example.com,我得到以下信息:

  

未找到

     

在此服务器上找不到请求的网址。

如果我去https://example.com,那就完美了。

如何正确强制https,同时保留其他重写规则?

感谢您的帮助

麦克

1 个答案:

答案 0 :(得分:1)

以下是我通常使用的内容:

RewriteCond %{HTTPS} !=on
RewriteCond %{ENV:HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

从未遇到任何问题。