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


Run entire website in https exclude admin directory

我想通过排除管理文件夹在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中重定向,而不将其视为管理文件夹。

期待您对此提供意见。

使用此条件:

RewriteCond %{REQUEST_URI} !^/admin(?!'.php)

我会将您的代码重写为:

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,我就不会被重定向。

在第三条规则中,将!^/admin替换为^/(admin.*)允许您重定向,即使您尝试访问例如http://example.com/admin/index.php

在最后一行中,您依赖于浏览器设置的Host标头
这意味着这是不可靠的
请改用%{SERVER_NAME},它依赖于机器名称本身。

此外,您在上一条规则中有[R=permanent,L],但它需要一个状态代码
代码301表示永久重定向,浏览器将对其进行缓存


如果你需要,你可以去http://htaccess.madewithlove.be/以测试该CCD_ 11代码
此外,您可以检查http://httpd.apache.org/docs/current/mod/mod_rewrite.html用于CCD_ 12重定向模块的文档。