.htaccess将HTTPS强制添加到子目录的现有重写规则

时间:2017-01-24 05:55:42

标签: apache .htaccess mod-rewrite https

可能我正在监督一些非常基本的东西,htaccess不是我的专业领域。

我的网站仅限https,为实现此目的,根文件夹/包含以下行:

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R=301,L]

这很好用。现在我们有了一个名为/ projects的新文件夹,它包含自己的htaccess规则,用于通过名为/projects/project.html的文件在数据库查询中翻译url

文件夹/项目中的工作htaccess是:

RewriteEngine On 
RewriteBase /projects/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L]

现在我想在这个上强制使用https连接,因为如果您直接访问http://URL,主目录中的https规则不会应用于/ projects。因此我将文件修改为:

RewriteEngine On 

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L,NE]

RewriteBase /projects/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L]

有了这个,它会切换到https,但我一直收到“ERR_TOO_MANY_REDIRECTS”。

当我改变@thickguru建议的行时,像这样:

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

它会立即将我重定向到https://example.com/index.html

我摆弄了这些设置,也提到了this post的信息,但是我仍然无法让它发挥作用。

2 个答案:

答案 0 :(得分:3)

我刚注意到你匹配的变量是%{ENV:HTTPS} ,所以你可以在/projects/.htaccess中使用以下规则:

RewriteEngine on

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

清除浏览器缓存或尝试使用不同的浏览器进行测试。

答案 1 :(得分:1)

.htaccess

中使用此功能
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE]

另外,请将其置于您的其他RewriteRule之上,以便.htaccess看起来像:

RewriteEngine On 

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE]

RewriteBase /projecten/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L]

编辑 - 试试这个:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]