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

标签 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

文件夹/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/

相关文章:

python - 通过两个单独的域访问 Django Web 应用程序

linux - 禁止 : cannot access/on server

url - 包含数字的搜索引擎友好 URL……好还是坏?

.htaccess - 从 htaccess 重定向中排除子域

regex - Force SSL .htaccess Only For WWW not any other subdomain

javascript - .htaccess 文件扩展名移除器代码破坏网站表单

java - 将 BIRT 报告部署到 Tomcat 9.0 的问题

apache - 正确设置重定向 410(已消失)

svn - 为什么 Subversion 不允许提交 .htaccess 文件?

php - 如何重写根目录中的目录