She*_*man 8 mod-rewrite rewrite .htaccess apache2
我正在编辑一个.htaccess文件..
在 RewriteRules 的 RewriteCondition 中,HTTPS_HOST似乎只匹配通过https://协议 (ssl)访问的 url 。我在某处的文档中看到它是一个 T/F 变量,指示是否使用安全协议访问了 url。
然而,我在上文档的麻烦发现是否HTTP_HOST只匹配http://协议,或者如果它有效地匹配//相对的协议,这意味着它符合双方 http:// 和 https://。
有人可以以一种或另一种方式确认,或向我指出此信息的明确来源吗?
此外,如果HTTP_HOST匹配两个协议变体,过滤仅 http://协议匹配的最佳方法是什么?
例子:
<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
相比之下:
...
Rewritecond %{HTTPS_HOST} ^\/\.(?!some-url).*$
...
Run Code Online (Sandbox Code Playgroud)
编辑:实验表明,HTTP_HOST 这似乎与两种协议都匹配,而HTTPS_HOST仅当协议或 url 以https://.
.
(注重:apache2标签
。TBH,我不能肯定我运行的是什么版本的Apache将尝试找出,这样我就可以装上适当的标签..
我想httpd -v,apache -v,apache2ctl -S,apachectl -S,httpd -S,等(这不是一个虚拟主机的问题,我有 nginx, 它被认为是用于 (虚拟服务器) 无论如何, 但我还是尝试了最后 3 个 (virtualhost) 命令, 看看它们是否会在我的 apache 版本上启发我).
对这些命令的响应说要么我必须先安装 apache2,或者它是一个未知命令。
我有一个/etc/apache2文件夹,但没有/usr/local/apache(因此没有/usr/local/apache/bin/httpd文件夹)。
)
MrW*_*ite 11
没有这样的 Apache 服务器变量HTTPS_HOST,只有HTTP_HOST. 如果HTTPS_HOST在您的服务器上设置,则它特定于您的服务器。
所述HTTP_HOST服务器变量包含的值Host的HTTP请求报头(即,在主机名),这是不考虑所使用的协议的(HTTP或HTTPS)。与所有以 start 开头的变量一样HTTP_,它们包含相应 HTTP 请求标头的值。
也许您正在考虑HTTPSApache 服务器变量?这包含值on或off取决于请求是否通过 HTTPS。因此,如果您没有管理 SSL 的前端代理,那么它就是HTTPS您用来确定请求是通过 HTTP 还是 HTTPS 协议的服务器变量。
参考:
我有 nginx
那么,你用 Nginx 做什么?是你的应用服务器吗?还是您将其用作前端代理?在这种情况下,HTTPS可能不是要使用的变量。
更新:
Run Code Online (Sandbox Code Playgroud)Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$ RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
这真的没有意义。该条件(RewriteCond指令)将永远不会成功(因为Host头从不包含斜杠),所以会重定向永远不会发生。
如上所述,HTTP_HOST服务器变量仅包含主机名,例如。example.com或www.example.com。它不包含 URL 路径,正如您在此处假设的那样。您的条件正在尝试匹配/. 未跟随的文字some-url(使用负前瞻)。该主机将永远不会开始(甚至包含)一斜线,所以它无法在第一个字符。
我正在尝试修改阻止 letencrypt 续订的 htaccess 规则,......所以有一个主要问题(众所周知的是获得 403)
要对特定 URL 路径的特定规则进行例外处理,您可以执行以下操作:
Rewritecond %{REQUEST_URI} !^/\.well-known
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
Run Code Online (Sandbox Code Playgroud)
这排除(注意!前缀)任何以 开头的 URL /.well-known。在!对前缀CondPattern否定的正则表达式。所述REQUEST_URI服务器变量包含来自请求的完整URL路径(这自然不包括协议,主机名和查询字符串)。
但是,您声明“.well-known正在收到 403” - 您可能需要找出触发 403 的原因并对该规则应用例外。
或者,在.htaccess文件的最顶部包含一个例外:
# Any requests that start "/.well-known" are ignored
RewriteRule ^\.well-known - [L]
Run Code Online (Sandbox Code Playgroud)
(请注意与 URL-path 匹配的RewriteRule 模式中没有斜杠前缀。)
最初(也许现在也是次要的)我认为在过期的证书上要求 https 可能是一个问题。
是的,那肯定会有问题。用户将收到一个浏览器警告,指出证书无效并且请求永远不会到达您的服务器。
| 归档时间: |
|
| 查看次数: |
27061 次 |
| 最近记录: |