【问题标题】:Force HTTPS on rewritten url via htaccess通过 htaccess 在重写的 url 上强制 HTTPS
【发布时间】:2012-07-08 08:02:33
【问题描述】:

我在www.domain.com 上有一个网站,这里是根(也是唯一的).htaccess file

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico)$ [NC]
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]

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

我基本上是在重写我的 URL,所以一切都通过 index.php 页面。

如何在www.domain.com/login/register/settings 上强制HTTPS (SSL)?所以当我尝试访问http://www.domain.com/login 时,我应该立即重定向到https://www.domain.com/login

我搜索了 SO 并找到了文件夹,所以如果我有文件夹 /login 它会起作用,但对于我来说 已经重写 URL。

【问题讨论】:

    标签: .htaccess ssl https


    【解决方案1】:

    使用 mod_rewrite 你应该可以做这样的事情

        RewriteCond     %{SERVER_PORT} !443
        RewriteCond     %{REQUEST_URI} ^/register
        RewriteRule     (.*) https://www.domain.com/register [R]
    

    【讨论】:

    • 嗯...不,它不起作用:/ 我仍然可以通过普通 HTTP 访问 /register。我把它放在第一个 RewriteRule 之后。
    【解决方案2】:

    试试:

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^login$ https://www.domain.com/login     [R=301,L]
    RewriteRule ^register$ https://www.domain.com/register [R=301,L]
    RewriteRule ^settings$ https://www.domain.com/settings [R=301,L]
    

    【讨论】:

    • 这将在整个网站级别进行重定向,我不希望这样。我只想在这三个页面上(登录、注册、设置)。它还重定向到www.domain.com/index.php?path=login 而不是www.domain.com/login
    • 也许它不起作用,因为它是 已经重写 url,就像你提到的那样。
    • 嗯,这就是我发布这个问题的原因(如何使它工作):)
    • 尝试将其作为第一个重写规则,然后才是其余的规则,然后让我们看看它是否有效;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2017-10-12
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多