2016-11-10 4 views
0

Apache 2.4 auf CentOS 7, auf einem cPanel/WHM-Remote-Server.Apache mod_rewrite REQUEST_URI nicht übereinstimmendes Muster

Ich möchte die 404-Antwort des Apache-Servers erhalten, wenn eine .jpg-Datei nicht gefunden wird, anstatt in index.php zu rewriting, die die gesamte Web-App lädt.

Versuchen, dies in .htaccess zu tun.

#Trying to exclude jpegs: 
RewriteCond %{REQUEST_URI} !\.jpg$ 
#And exclude these folders: 
RewriteCond %{REQUEST_URI} !^/(folder1|folder2)/ 
#And rewrite everything else (commenting this results in regular Apache 404 responses for missing image files): 
RewriteRule .* index.php [L] 

Wenn ich versuche, diese URLs zu laden, die in 404, example.com/asdf.jpg führen oder example.com/folder1/abc.css, die RewriteRule geht nach wie vor in Kraft tritt, werden sie zu index.php neu geschrieben, und die CMS 404 Seite geladen wird.

Wenn ich die RewriteRule kommentieren, dann führen diese zwei URLs in der leichten Apache 404 Antwort anstelle der CMS 404 Antwort.

komplette mod_rewrite Abschnitt .htaccess:

<IfModule mod_rewrite.c> 
############################################ 
## enable rewrites 

    Options +FollowSymLinks 
    RewriteEngine on 

     RewriteBase/


    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

############################################ 
## always send 404 on missing files in these folders 

    RewriteCond %{REQUEST_URI} !^/(folder1|folder2)/ 

############################################ 
## never rewrite for existing files, directories and links 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 
## test excluding .jpg from rewrite 
    RewriteCond %{REQUEST_URI} !(\.jpg)$ 

############################################ 
## rewrite everything else to index.php 

    RewriteRule .* index.php [L] 

</IfModule> 

Bearbeiten - hier ist die VirtualHost config:

<VirtualHost 12.34.56.7:80> 
    ServerName site.example.com 
    ServerAlias www.site.example.com 
    DocumentRoot /home/someuser/public_html 
    ServerAdmin [email protected] 
    UseCanonicalName Off 
    CustomLog /etc/apache2/logs/domlogs/site.example.com combined 
    <IfModule log_config_module> 
    <IfModule logio_module> 
     CustomLog /etc/apache2/logs/domlogs/site.example.com-bytes_log "%{% 
s}t %I .\n%{%s}t %O ." 
    </IfModule> 
    </IfModule> 
    ## User someuser # Needed for Cpanel::ApacheConf 
    <IfModule userdir_module> 
    <IfModule !mpm_itk.c> 
     <IfModule !ruid2_module> 
     UserDir enabled someuser 
     </IfModule> 
    </IfModule> 
    </IfModule> 

    # Enable backwards compatible Server Side Include expression parser for Apache 
versions >= 2.4. 
    # To selectively use the newer Apache 2.4 expression parser, disable SSILegacy 
ExprParser in 
    # the user's .htaccess file. For more information, please read: 
    # http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser 
    <IfModule include_module> 
    <Directory "/home/someuser/public_html"> 
     SSILegacyExprParser On 
    </Directory> 
    </IfModule> 

    <IfModule suphp_module> 
    suPHP_UserGroup someuser someuser 
    </IfModule> 
    <IfModule suexec_module> 
    <IfModule !mod_ruid2.c> 
     SuexecUserGroup someuser someuser 
    </IfModule> 
    </IfModule> 
    <IfModule ruid2_module> 
    RMode config 
    RUidGid someuser someuser 
    </IfModule> 
    <IfModule mpm_itk.c> 
    # For more information on MPM ITK, please read: 
    # http://mpm-itk.sesse.net/ 
    AssignUserID someuser someuser 
    </IfModule> 

    <IfModule alias_module> 
    ScriptAlias /cgi-bin/ /home/someuser/public_html/cgi-bin/ 
    </IfModule> 

    # To customize this VirtualHost use an include file at the following location 
    # Include "/etc/apache2/conf.d/userdata/std/2_4/someuser/csite.example.com/*.conf" 
</VirtualHost> 

bearbeiten, habe ich trace6 umschreiben. Es zeigt die .* Regel, die angewendet wird, obwohl folder1 die Regel nicht angewendet werden sollte. Ich habe dies auf einem virtuellen Computer getestet und es funktioniert dort, aber nicht auf diesem physischen Remote-Server.

Hier sind die ersten 13 Zeilen der Spur:

[Fri Nov 11 02:21:08.389721 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] add path info postfix: /home/someuser/public_html/folder1/catalog/ABC -> /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389764 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg -> folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389775 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] applying pattern '.*' to uri 'folder1/catalog/ABC/10162015/Asdf.jpg', referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389790 2016] [rewrite:trace5] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] setting env variable'HTTP_AUTHORIZATION' to '', referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389802 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] add path info postfix: /home/someuser/public_html/folder1/catalog/ABC -> /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389812 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg -> folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389821 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] applying pattern '.*' to uri 'folder1/catalog/ABC/10162015/Asdf.jpg', referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389835 2016] [rewrite:trace4] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] RewriteCond: input='/folder1/catalog/ABC/10162015/Asdf.jpg' pattern='!^/(folder1|folder2)/' => not-matched, referer:http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389844 2016] [rewrite:trace1] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] pass through /home/someuser/public_html/folder1/catalog/ABC, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389922 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/404.shtml -> 404.shtml, referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389945 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] applying pattern '.*' to uri '404.shtml', referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389958 2016] [rewrite:trace5] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] setting env variable 'HTTP_AUTHORIZATION' to '', referer: http://site.example.com/widgets/bathroom/ 
[Fri Nov 11 02:21:08.389969 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/404.shtml -> 404.shtml, referer: http://site.example.com/widgets/bathroom/ 
+0

Gibt es noch andere Regeln über/unter diesen? –

+0

Das ganze ist in einem 'if-Modul' für' mod_rewrite' eingeschlossen und dann ist das Einzige, was vor den Direktiven in meiner Frage mit http/https zusammenhängt, was nicht scheint, dass es dieses Problem beeinflussen würde. Danach gibt es nichts. –

+0

Ihre Regeln sehen OK aus, und ich habe sogar versucht, das Problem auf meinem Server zu reproduzieren, aber alles funktioniert wie erwartet. Suchen Sie nach Typen, Browser-Caching und aktivieren Sie die Überschreibeprotokollierung. –

Antwort

1

Es klingt wie wird Ihre Regel die subrequest fangen, wenn für die passende ErrorDocument suchen. Versuchen Sie, die Regel NS zu Ihrer Regel hinzuzufügen.

+0

Ich habe die Regel auf diese geändert, aber das Ergebnis ist das gleiche wie zuvor. 'RewriteRule. * Index.php [L, NS]' –

+0

Wenn Sie 'ErrorDocument's nicht gesetzt haben, kann Apache einen internen 404 auf ihnen bekommen, so dass Ihre Regeln das irgendwie fangen können. Sie haben Zugriff auf die Server-Konfiguration, also [logging verwenden] (http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging) auf 'trace8', um zu sehen, was vor sich geht. – Walf

+0

Ich habe die ersten 13 Zeilen der 115 Zeile 'trace6' gepostet. Kannst du etwas davon erzählen oder sollte ich mehr davon (oder alles) posten? –

Verwandte Themen