可能我正在监督一些非常基本的东西,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的信息,但是我仍然无法让它发挥作用。
答案 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]