我想通过排除管理文件夹在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重定向模块的文档。