强制HTTPS以及URL重写?

时间:2015-12-26 11:15:09

标签: php apache .htaccess mod-rewrite url-rewriting

我将此规则作为.htaccess文件的一部分:

RewriteRule ^view-([0-9]+)$ view.php?id=$1 [L]

这对我来说很好,除了现在我想添加以下功能 - 我想为整个这个目录实现HTTPS(这个.htaccess在一个名为/information/的目录中,除了这一条规则 - 任何与view-([0-9]+)匹配的规则。这就是我所拥有的:

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/information/view-[0-9]+
RewriteRule ^(.*)$ http://www.example.com/information/$1 [R]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/information/view-[0-9]+
RewriteRule ^(.*)$ https://www.example.com/information/$1 [R]

这对我来说工作得很好,除非我现在尝试访问http://www.example.com/information/view-101,它会将我重定向到https://www.example.com/information/view.php?id=101。如果我尝试访问https://www.example.com/information/view-101,它也会将我重定向到相同的网址。

我将这六行放在URL重写代码之上。所有其他网址都可以正常使用 - 例如,http://www.example.com/information/about会将我带到https://www.example.com/information/about,这是正确的功能 - 只是一个网址似乎将我带到最基本的网址表单 - view.php?id=101 ,无视所有URL重写。

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

从顶部删除这6行并写下这样的规则。在.htaccess文件顶部添加以下行应对您网域的所有网址强制执行 HTTPS 。它还会将您域名的non-www版本重定向到www版本:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.yourdomain.com%{REQUEST_URI} [R=301,L]

答案 1 :(得分:0)

RewriteEngine on

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/information/view-[0-9]+
RewriteRule ^(.*)$ http://%{HTTP_HOST}/information/$1 [L,R]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/information/view-[0-9]+
RewriteCond %{REQUEST_URI} !^/information/view.php
RewriteRule ^(.*)$ https://%{HTTP_HOST}/information/$1 [L,R]

RewriteRule ^view-([0-9]+)$ view.php?id=$1 [L]

这有效,但我不明白为什么apache使用代码301将外部重定向到view.php。

相关问题