在https排除管理目录中运行整个网站

时间:2014-11-05 05:47:18

标签: php .htaccess

我想通过排除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。

期待您对此的意见。

2 个答案:

答案 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重定向模块的文档。