带有参数的 url 的 Apache RewriteCond
Apache RewriteCond for url with parameters
欢迎,
很长一段时间我都在努力解决将 url 重定向到单独的 url 的问题,以防出现特殊的 baerer 令牌,我不想更改任何参数只是进行匹配并将此匹配发送给另一个 url。
我的设置是 apache 2.4.41
邮递员的典型要求:
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
重定向应该是这样的:
http://tomcat-local:10022/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
到目前为止我尝试了什么
在 apache2.conf
RewriteCond %{QUERY_STRING} ^access_token=(988738467)$
RewriteRule (.*) http://tomcat-local:10022/ [R=301,L]
目标是具有特定令牌的客户端将由特定 tomcat 服务器提供服务
请帮助我,也许我做错了什么,我也尝试了 RedirectMatch,不幸的是没有成功,我在 https://regex101.com/
上测试的所有正则表达式
编辑:
仍然没有,我不明白哪里出了问题。我的配置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
</IfModule>
# disable some HTTP request types for security reasons
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
</IfModule>
Access_log :
"GET /rest/auto-com/complete_addr?in_country=FR&in_line=73%20avenue%20des%20lilas&access_token=988738467 HTTP/1.1" "complete_addr" 200 200 1225 "-" "PostmanRuntime/7.28.4"
已解决
RewriteEngine On
RewriteOptions InheritDown
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
# disable some HTTP request types for security reasons
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
你好保罗
最后通过在重写规则之前添加RewriteOptions InheritDown
,并为所有虚拟主机添加RewriteEngine On
解决了这个问题。
尝试:
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,R=301,L]
这将重定向:
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
到 http://tomcat-local:10022/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
如果 access_token
是 988738467
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?abc=123&access_token=988738467
到 http://tomcat-local:10022/rest/auto-com/complete_addr?abc=123&access_token=988738467
虽然我给了你这个解决方案,但我仍然很困惑你为什么要对本地页面进行外部重定向。我相信你想要代理通行证。
问题 Rewrite*
无效的解释:
^access_token
in ^access_token=(988738467)$
表示 access_token
必须是查询字符串中的第一个。
(988738467)$
表示988738467
必须在查询字符串的末尾。
由于上述问题,只有 https://https://xxxdddyyy.dqco1.firma-online.com/anything?access_token=988738467
可以使用您的 RewriteCond
。
编辑:
对于后端服务器的内部重定向:
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
您可能希望启用模块 mod_proxy
和 mod_proxy_http
。
编辑 2:
您的配置应该是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
# disable some HTTP request types for security reasons
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
</IfModule>
确保 mod_rewrite 已启用。我建议您删除 IfModule
以避免在某天禁用 mod_rewrite
时造成混淆。因为IfModule
会导致不显示错误,反而会造成混乱。
编辑 3:
在虚拟主机外添加 RewriteOptions InheritDown
,导致规则被虚拟主机继承。
因此,所有虚拟主机都将使用它。
默认情况下,在 Apache 中,在虚拟主机外部指定的规则不会被虚拟主机继承。
欢迎,
很长一段时间我都在努力解决将 url 重定向到单独的 url 的问题,以防出现特殊的 baerer 令牌,我不想更改任何参数只是进行匹配并将此匹配发送给另一个 url。
我的设置是 apache 2.4.41
邮递员的典型要求:
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
重定向应该是这样的:
http://tomcat-local:10022/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
到目前为止我尝试了什么 在 apache2.conf
RewriteCond %{QUERY_STRING} ^access_token=(988738467)$
RewriteRule (.*) http://tomcat-local:10022/ [R=301,L]
目标是具有特定令牌的客户端将由特定 tomcat 服务器提供服务
请帮助我,也许我做错了什么,我也尝试了 RedirectMatch,不幸的是没有成功,我在 https://regex101.com/
上测试的所有正则表达式编辑:
仍然没有,我不明白哪里出了问题。我的配置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
</IfModule>
# disable some HTTP request types for security reasons
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
</IfModule>
Access_log :
"GET /rest/auto-com/complete_addr?in_country=FR&in_line=73%20avenue%20des%20lilas&access_token=988738467 HTTP/1.1" "complete_addr" 200 200 1225 "-" "PostmanRuntime/7.28.4"
已解决
RewriteEngine On
RewriteOptions InheritDown
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
# disable some HTTP request types for security reasons
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
你好保罗
最后通过在重写规则之前添加RewriteOptions InheritDown
,并为所有虚拟主机添加RewriteEngine On
解决了这个问题。
尝试:
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,R=301,L]
这将重定向:
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
到http://tomcat-local:10022/rest/auto-com/complete_addr?in_country=FR&in_line=73 avenue des lilas&access_token=988738467
如果access_token
是988738467
https://xxxdddyyy.dqco1.firma-online.com/rest/auto-com/complete_addr?abc=123&access_token=988738467
到http://tomcat-local:10022/rest/auto-com/complete_addr?abc=123&access_token=988738467
虽然我给了你这个解决方案,但我仍然很困惑你为什么要对本地页面进行外部重定向。我相信你想要代理通行证。
问题 Rewrite*
无效的解释:
^access_token
in^access_token=(988738467)$
表示access_token
必须是查询字符串中的第一个。(988738467)$
表示988738467
必须在查询字符串的末尾。
由于上述问题,只有 https://https://xxxdddyyy.dqco1.firma-online.com/anything?access_token=988738467
可以使用您的 RewriteCond
。
编辑:
对于后端服务器的内部重定向:
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
您可能希望启用模块 mod_proxy
和 mod_proxy_http
。
编辑 2:
您的配置应该是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)access_token=988738467($|&)
RewriteRule ^(.*)$ http://tomcat-local:10022/ [QSA,P,L]
# disable some HTTP request types for security reasons
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD|OPTIONS)$
RewriteRule .* - [F]
</IfModule>
确保 mod_rewrite 已启用。我建议您删除 IfModule
以避免在某天禁用 mod_rewrite
时造成混淆。因为IfModule
会导致不显示错误,反而会造成混乱。
编辑 3:
在虚拟主机外添加 RewriteOptions InheritDown
,导致规则被虚拟主机继承。
因此,所有虚拟主机都将使用它。
默认情况下,在 Apache 中,在虚拟主机外部指定的规则不会被虚拟主机继承。