LocationMatch与Location不匹配(Apache 2.4)
我试图了解LocationMatch与Location不匹配(Apache 2.4),apache,locationmatch,Apache,Locationmatch,我试图了解LocationMatch的情况。现在我有一个类似于下面的位置 <Location "/context"> RequestHeader set X-Forwarded-Proto https RequestHeader set X-Forwarded-Port 443 ProxyPreserveHost On ProxyPass http://example.com/context retry=0 connectiontimeout=300 t
LocationMatch
的情况。现在我有一个类似于下面的位置
<Location "/context">
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
ProxyPass http://example.com/context retry=0 connectiontimeout=300 timeout=300
ProxyPassReverse http://example.com/context
</Location>
但一旦我引入正则表达式,它就不再正确匹配。例如,我想匹配以/context
开头的路径
<LocationMatch "^/context">
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
ProxyPass http://example.com/context retry=0 connectiontimeout=300 timeout=300
ProxyPassReverse http://example.com/context
</LocationMatch>
我的问题是,
是否应该匹配以/context
开头的URL?例如,https://mydomain/context
?如果这是匹配的,你知道还有什么干扰吗?我使用的是2.4.41版,但至少从2.4.6版开始我就看到了这种行为。谢谢根据ProxyPass
指令:
当在
节中使用时,第一个参数被省略
本地目录是从
获取的。同样的意志
发生在
节内但是,ProxyPass不会
这样解释regexp,因此有必要使用ProxyPassMatch
而不是在这种情况下。
如果我理解正确,并不是因为您的
正则表达式无效,而是因为您的
没有将其解释为正则表达式。所以使用
此外,这也让我看到了一些支持
和
彼此不兼容的观点的其他页面:
如和所示,我需要更换
ProxyPass
[与]ProxyPassMatch
在LocationMatch
块内使用时
你解决问题了吗?我在Apache2.4.29中遇到了同样的问题。
<LocationMatch "^/context">
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
ProxyPass http://example.com/context retry=0 connectiontimeout=300 timeout=300
ProxyPassReverse http://example.com/context
</LocationMatch>
ProxyRequests off
PassEnv HTTPD_SERVER_NAME HTTPD_SERVER_ADMIN SSL_CERTIFICATE_FILE SSL_CERTIFICATE_KEY_FILE
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile ${SSL_CERTIFICATE_FILE}
SSLCertificateKeyFile ${SSL_CERTIFICATE_KEY_FILE}
Protocols h2 http/1.1
ServerName ${HTTPD_SERVER_NAME}
ServerAdmin ${HTTPD_SERVER_ADMIN}
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# Requires Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
# Requires Apache >= 2.4.11
SSLSessionTickets Off
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
<LocationMatch "^/context">
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
ProxyPass http://example.com/context retry=0 connectiontimeout=300 timeout=300
ProxyPassReverse http://example.com/context
</LocationMatch>
</VirtualHost>