Schreiben Sie die Regel von .htaccess in Apache VirtualHost um
Ich habe die folgende .htaccess
Datei:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
RewriteBase /
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /API/index.php [L]
Ist es möglich, die oben genannten Regeln in verwendbare VirtualHost
Blöcke umzuwandeln ?
<VirtualHost *:80>
ServerAdmin webmaster@web-api
DocumentRoot "/Users/shot/git/web-api"
ServerName web-api
ServerAlias web-api
ErrorLog "/private/var/log/apache2/web-api-error_log"
CustomLog "/private/var/log/apache2/web-api-access_log" common
RewriteEngine on
<Directory "/Users/shot/git/web-api">
Options FollowSymLinks
Order allow,deny
Allow from all
Require all granted
RewriteBase /
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /API/index.php [L]
</Directory>
</VirtualHost>
Aber im Apache-Fehlerprotokoll erhalte ich die folgende Ausgabe [core:error] [pid 2520] [client 127.0.0.1:52625] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
Antworten
Wenn Sie diese Anweisungen direkt in den Container einfügen möchten VirtualHost
(dh nicht in einen <Directory>
Container), können Sie sie folgendermaßen umschreiben:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^ - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteRule ^/. /API/index.php [L]
Erforderliche Änderungen:
Wenn die vhost-Anweisungen verarbeitet werden, wurde die Anforderung noch nicht dem Dateisystem zugeordnet. Daher muss ein Look-Ahead (
LA-U:REQUEST_FILENANE
) verwendet werden, um den resultierenden Dateinamen abzurufen.In einem VirtualHost-Kontext ist der vom
RewriteRule
Muster übereinstimmende URL-Pfad root-relativ und beginnt mit einem Schrägstrich. Anstelle von.
in.htacces
benötigen Sie also/.
(oder^/.
) in der vhost-Konfiguration.Die
RewriteBase
Direktive gilt nicht im Kontext von virtualhost und muss daher entfernt werden. (Obwohl Sie dies in Ihrer vorhandenen.htaccess
Datei sowieso nicht verwendet haben .)
Zusätzlich:
In der Direktive, die die
HTTP_AUTHORIZATION
Umgebungsvariable festlegt, ist das Muster.*
weniger effizient. Besser zu verwenden^
(oder ähnlich - etwas, das nicht den gesamten URL-Pfad durchlaufen muss)Ihr anfänglicher
<IfModule>
Wrapper ist bedeutungslos.