我将此规则作为.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重写。
有什么方法可以解决这个问题吗?
答案 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。