
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 .htaccess
Datei unter /var/www/html/example.com/mysub/.htaccess
. In der .htaccess
Datei 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.com
Ich kann in meinem Browser problemlos zu navigieren . Wenn ich jedoch versuche, zu zu gehen example.com/mysub
, wird mir example.com/index.php
anstelle von angezeigt example.com/mysub/index.php
.
Ich nehme an, das bedeutet, $1
dass 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>