2016-06-16 11 views
2

Ich versuche, Apache die URL unter bestimmten Bedingungen neu schreiben, aber es ist fehlgeschlagen. Ich habe versucht, nach der Antwort zu suchen, bin aber mit leeren Händen aufgestiegen. Wir verwenden Apache als unseren Webserver und leiten die Anfragen an Tomcat zur Verwendung unseres Coldfusion/Lucaee-Codes weiter.Apache Ignorieren Rewrite-Regeln bei der Verwendung von mod_proxy

Grundsätzlich funktioniert das Neuschreiben, wenn ich auf eine HTML-Datei zugreife, aber wenn ich auf eine CFM- oder CFC-Datei (Coldfusion) zugreife, wird die Rewrite-Regel vollständig ignoriert. Ich möchte, dass die URL vor dem Durchlaufen des Proxy neu geschrieben wird, aber aus irgendeinem Grund kann ich das nicht zum Laufen bringen.

Vielen Dank im Voraus an jeden, der mir helfen kann, dies zu lösen.

Dies ist in meiner httpd.conf Datei:

Hier ist die Virtual Host-Datei:

<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> 

Snippet zum Boden der 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> 

Dies ist in .htaccess:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 
RewriteRule ^(.*) /index.cfm/$1 [L] 

Antwort

2

Sie müssen das [P] -Flag verwenden, das bewirkt, dass die Anfrage von mod_proxy bearbeitet und über eine Proxy-Anfrage bearbeitet wird.

Zum Beispiel

RewriteRule ^(.*) /index.cfm/$1 [L] 

wird

RewriteRule ^(.*) /index.cfm/$1 [PL] 

oder wenn Sie den ersten Vorwärts benötigen Slash wie

RewriteRule ^/(.*) /index.cfm/$1 [PL] 

auch einen Blick auf die [PT] Flagge nehmen.

https://httpd.apache.org/docs/current/rewrite/flags.html

Aktualisierung der Antwort mit dem, was ich in meinem Apache-Konfigurationsdatei haben Arbeits (Ich habe keine virtuellen Hosts Config haben, und ich habe nicht .htaccess, weil ich don‘ t brauchen sie in meinem Fall)

Meine Regel ist, dass, wenn ich/x/in Request-URL habe ich dann index.cfm aus/Xml/Unterordner aufrufen.

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] 
+0

Dies funktioniert nicht. Es ignoriert weiterhin Dateien, die .cfm oder .cfc als Dateierweiterung enthalten. – Yamaha32088

+0

Die Antwort wurde mit dem, was ich gerade bearbeite, aktualisiert. –