我是 Apache 新手。
最终目标是使用 Apache 作为反向代理(使其工作)并通过 mod-rewrite 将特定值附加到查询字符串(无法使其工作)。
有问题的字符串是:
http://localhost:9089/views/JavaScriptTarget/Dashboard
...我想附加?Category=Furniture:
http://localhost:9089/views/JavaScriptTarget/Dashboard?Category=Furniture
我已经启用了该模块:
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule sed_module modules/mod_sed.so
我有尝试在许多地方启用重写日志:
<Directory />
Options All
AllowOverride All
LogLevel debug rewrite:trace8
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^Dashboard$ Dashboard?Category=Furniture [NC]
</Directory>
...和:
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel debug rewrite:trace8
...在这两种情况下,我都没有在 error.log 中看到 [rewrite] 的提及
最后,这里是 httpd.conf 中包含重写规则本身和反向代理内容的部分:
<Directory />
Options All
AllowOverride All
LogLevel debug rewrite:trace8
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^Dashboard$ Dashboard?Category=Furniture [NC]
</Directory>
#####Proxy Rule
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server8/
ProxyPassReverse / http://server8/
当我执行字符串时,http://localhost:9089/views/JavaScriptTarget/Dashboard
我被正确地重定向到http://server8/views/JavaScriptTarget/Dashboard
...但?Category=Furniture
未被附加。
知道我在这里做错了什么吗?我已经束手无策了。我甚至无法让重写错误显示在日志中!
顺便说一下,我在 Windows x64(Win7)上使用 2.4.4......
答案1
您的 RewriteRule "^Dashboard$" 意味着 URL 字符串在 "Dashboard" 之前和之后都没有任何内容。这是您想要的吗?您的 URL 似乎为 "/views/JavaScriptTarget/Dashboard"。
也许这并不重要,但我不会将 RewriteRule 放入配置中 - 在“Directory”指令上我不是专家,因为我主要使用 Apache 进行反向代理,而我最终并没有使用它。
因此,所有这些最终都将代理到您的后端服务器“server8”。再次确保您的 server8 上没有任何使用服务器主机名进行重定向的内容。如果您明白我的意思,您可以使用“/”进行重定向,但不能使用“{servername}/”进行重定向。
我将设置以下配置来实现您的要求。
RewriteEngine On
RewriteRule ^/views/JavaScriptTarget/Dashboard /views/JavaScriptTarget/Dashboard?Category=Furniture [PT]
ProxyPass / http://server8/
ProxyPassReverse / http://server8/