【问题标题】:Apache ignoring rewrite rules when using mod_proxyApache 在使用 mod_proxy 时忽略重写规则
【发布时间】:2023-04-11 11:26:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您将需要使用 [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,因为我不需要它们案例)

    我的规则是,如果我在请求 url 中有 /x/,那么我从 /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]
    

    【讨论】:

    • 这不起作用。它仍然忽略包含 .cfm 或 .cfc 作为文件扩展名的文件
    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2012-12-01
    • 2011-06-14
    • 2019-03-13
    • 2017-04-29
    • 2017-05-03
    相关资源
    最近更新 更多