PHP-FPM funktioniert nicht mit htaccess

PHP-FPM funktioniert nicht mit htaccess

Ich habe ein VirtualHost:

<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com"
ServerName example.com
ServerAlias *.example.com
<Directory "/var/www/html/example.com">
    Require all granted
    Options -Indexes +FollowSymLinks -ExecCGI
    AllowOverride All
    DirectoryIndex index.php
    <IfModule mod_proxy_fcgi.c>
        RewriteEngine On
        RewriteBase /
        RewriteOptions InheritBefore        
        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule ^([^\.]+\.php)$ fcgi://127.0.0.1:9000/var/www/html/example.com/$1 [L,P]
    </IfModule>
</Directory>
</VirtualHost>

Und eine .htaccessDatei unter /var/www/html/example.com/mysub/.htaccess. In der .htaccessDatei habe ich:

Options -MultiViews
RewriteEngine On
RewriteBase /mysub

Options +FollowSymLinks

RewriteCond $1 !^(index\.php|assets|css|js|favicon\.ico|robots\.txt)

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Das Thema:example.comIch kann in meinem Browser problemlos zu navigieren . Wenn ich jedoch versuche, zu zu gehen example.com/mysub, wird mir example.com/index.phpanstelle von angezeigt example.com/mysub/index.php.

Ich nehme an, das bedeutet, $1dass in der VirtualHost-RewriteRule das Verzeichnispräfix nicht enthalten ist mysub. Warum ist das so? Ich dachte, vielleicht sei die RewriteBase (die in beiden Dateien unterschiedlich ist) das Problem, aber die Änderung hat die Ausgabe nicht geändert.

Ich glaube, das Problem liegt beim VirtualHost mod_rewrite. Auf einem anderen Server (Centos 5) funktioniert die Website einwandfrei (obwohl ich kein php-fpm verwende). Ich würde es vorziehen, den htaccess nicht zu ändern, da er Teil des Codes eines Drittanbieters ist.

PHP 5.4; CentOS 7; Apache 2.4

BEARBEITEN:Es funktioniert, wenn ich die htaccess-Umschreibungen in die VirtualHost-Datei verschiebe und die Pfade so ändere, dass sie mit einer Basis von / funktionieren. Das ist allerdings nicht ideal, da der Code von Drittanbietern jederzeit mit einer geänderten htaccess aktualisiert werden kann.

Antwort1

Das Verschieben des Rewrite außerhalb der Directory-Direktive des VirtualHost löste das Problem.

<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com"
ServerName example.com
ServerAlias *.example.com
<Directory "/var/www/html/example.com">
    Require all granted
    Options -Indexes -MultiViews +FollowSymLinks
    AllowOverride All
</Directory>
RewriteEngine On
RewriteOptions InheritBefore

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond $1 ^(.*\.php(/.*)?)$
RewriteRule ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1 [L,P]
</VirtualHost>

verwandte Informationen