使用.htaccess和HTTPS重写URL

时间:2015-03-19 13:29:57

标签: php .htaccess https url-rewriting

我有一个网站,我必须使用.htaccess文件将所有请求重定向到index.php,在那里处理重定向。 我想重写URL,同时使用HTTPS。没有HTTPS,它可以正常工作。

没有HTTPS工作.htaccess的代码。浏览器获得此输入:alert/create

RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]

这很好,但没有HTTPS。浏览器网址变为http://localhost/mypage/alert/create,,这就是我想要的。

我找到了一个允许我使用HTTPS的解决方案:

RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ https://%{SERVER_NAME}/mypage/index.php?controller=$1&action=$2&id=$3 [NC,L]

页面导航的工作方式与魅力相似,但浏览器会显示如下网址:

https://localhost/mypage/index.php?controller=alert&action=create&id=

请求的处理方式如下:

public function __construct($urlvalues) {
    $this->urlvalues = $urlvalues;
    if ($this->urlvalues['controller'] == "") {
        $this->controller = "home";
    } else {
        $this->controller = $this->urlvalues['controller'];
    }
    if ($this->urlvalues['action'] == "") {
        $this->action = "index";
    } else {
        $this->action = $this->urlvalues['action'];
    }
}

我需要一些提示。我一直在寻找互联网而不解决我的问题...... 如果我可以使用.htaccess,但是以另一种方式实现HTTPS,那也是完美的。 用PHP编写的服务器代码,在apache2上运行。

2 个答案:

答案 0 :(得分:0)

我会分两步完成。你已经拥有的第一个。这一个:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]

答案 1 :(得分:0)

解决!解决方案:将此添加到.htaccess中,按顺序添加:

RewriteEngine on

#force https 
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]