可能我正在监督一些非常基础的东西,htaccess 不是我的专业领域。
我的站点仅支持 https,为此,根文件夹/包含以下行:
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R=301,L]
这很好用。现在我们有一个名为/projects 的新文件夹,其中包含自己的 htaccess 规则,用于通过名为/projects/project.html 的文件转换数据库查询中的 url
文件夹/projects 中的工作 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 的信息,但是我仍然无法让它工作。
最佳答案
我刚刚注意到您要匹配的变量是 %{ENV:HTTPS} ,因此,您可以在/projects/.htaccess 中使用以下规则:
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
清除浏览器缓存或尝试使用不同的浏览器进行测试。
关于apache - .htaccess 添加 HTTPS 强制到子目录的现有重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820950/