我想通过排除admin文件夹以https运行整个网站。为此,我在.htaccess文件
中提出了以下代码RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=permanent,L]
上面的代码工作正常但是当我有文件admin.php或任何文件前面有一个admin关键字的文件而不是上面的那些文件.htaccess代码将其视为管理文件夹,因此它运行该文件使用http,应该使用https重定向,因为它位于解决方案的根目录中。
所以我可以确保当有一个带有admin关键字的文件时,应该将其视为文件,并通过不将其视为管理文件夹重定向到https。
期待您对此的意见。
答案 0 :(得分:0)
使用此条件:
RewriteCond %{REQUEST_URI} !^/admin(?!\.php)
答案 1 :(得分:0)
我会改写你的代码:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/(admin.*)
RewriteRule ^(.*)$ https://www.%{SERVER_NAME}/$1 [R=301,L]
缺少的第一件事是RewriteEngine on
指令
如果未启用模块,我们如何进行重定向?
我不明白为什么行RewriteCond %{HTTP_HOST} !^www\.
你想要达到什么目的?
检查它是否不以www
开头?
如果我转到http://example.com/admin
,我就不会被重定向。
在第3条规则中,将!^/admin
替换为^/(admin.*)
即使您尝试访问http://example.com/admin/index.php
也可以重定向。
在最后一行,您依赖Host
标题,浏览器设置 。
这意味着不可靠
请改用%{SERVER_NAME}
,这取决于机器名称本身。
此外,您在上一条规则中有[R=permanent,L]
,但它需要一个状态代码
代码301表示永久重定向,浏览器将缓存它。
如果您需要,可以转到http://htaccess.madewithlove.be/来测试此.htaccess
代码
另外,您可以查看http://httpd.apache.org/docs/current/mod/mod_rewrite.html以获取.htaccess
重定向模块的文档。