Apache在使用mod_proxy时忽略重写规则

时间:2016-06-16 20:42:58

标签: apache .htaccess mod-rewrite url-rewriting coldfusion

我试图让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]

1 个答案:

答案 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]