我试图让Apache根据某些条件重写URL,但它失败了。我试过寻找答案但空手而归。我们使用Apache作为我们的网络服务器,并将请求代理到Tomcat以使用我们的Coldfusion / Lucee代码。
基本上发生的事情是重写在我访问HTML文件时正常工作但是当我尝试访问CFM或CFC(Coldfusion)文件时,它将完全忽略重写规则。我想要的是在通过代理之前重写URL但由于某种原因我不能让它工作。
提前感谢能够帮助我解决此问题的任何人。
这是在我的httpd.conf
文件中:
这是虚拟主机文件:
<VirtualHost *:80>
ServerName dev.xxxxx.com
DirectoryIndex default.cfm index.cfm index.htm index.html
DocumentRoot "Z:/XXXXXXXXX"
<Directory "Z:/XXXXXXXXX">
Require all granted
Allow from all
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
</Directory>
<Proxy *>
Allow from 127.0.0.1
</Proxy>
RewriteEngine On
DirectoryIndex index.cfm
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://localhost:7009/$1$2
</VirtualHost>
httpd.conf
<IfModule proxy_module>
<Proxy *>
Allow from 127.0.0.1
</Proxy>
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://127.0.0.1:7009/$1$2
ProxyPassMatch ^/(.+\.cfchart)(/.*)?$ ajp://127.0.0.1:7009/$1$2
ProxyPassMatch ^/(.+\.cfml)(/.*)?$ ajp://127.0.0.1:7009/$1$2
ProxyPassReverse / ajp://127.0.0.1:7009/
</IfModule>
这是在.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteRule ^(.*) /index.cfm/$1 [L]
答案 0 :(得分:2)
您需要使用[P]标志,该标志会导致请求由mod_proxy处理,并通过代理请求进行处理。
例如
RewriteRule ^(.*) /index.cfm/$1 [L]
变为
RewriteRule ^(.*) /index.cfm/$1 [PL]
或者如果您需要第一个正斜杠,如
RewriteRule ^/(.*) /index.cfm/$1 [PL]
另请查看[PT]标志。
https://httpd.apache.org/docs/current/rewrite/flags.html
使用我在Apache配置文件中工作的内容更新答案(我没有虚拟主机配置,我没有.htaccess,因为我不需要它们。情况下)
我的规则是,如果我有/ x / in请求url,那么我从/ xml /子文件夹调用index.cfm。
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
RewriteEngine On
RewriteRule ^/x/(.*)$ /xml/index.cfm [PT]