it-swarm.com.de

So schreiben Sie eine generische .htaccess-Dateiregel in Bezug auf RewriteBase

Die folgende Regel in meinem .htaccess funktioniert einwandfrei, um Anrufe an index.php weiterzuleiten:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Dies funktioniert jedoch nicht, wenn eine temporäre URL wie http://example.com/~test/ ausgeführt wird.

In einem solchen Fall muss die .htaccess-Datei lauten:

RewriteEngine On
RewriteBase /~test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Beachten Sie das zusätzliche RewriteBase.

Frage: Ist es möglich, eine Regel in .htaccess zu schreiben, um zu "erkennen", ob dieses RewriteBase angewendet werden soll?

Der Grund ist das .htaccess, wenn es versionsgesteuert ist, und ich möchte, dass es auf mehreren Installationen funktioniert.

5
eoinoc

Soweit ich weiß, gibt es keinen zuverlässigen Weg, um festzustellen, wie der RewriteBase sein sollte. Wenn dies der Fall wäre, gäbe es keine Notwendigkeit für die Kluge, die RewriteBase ist , da mod_rewrite einfach die richtige Basis automatisch erkennen könnte.

1
Ilmari Karonen

Das Gleiche versuchte und bei meiner Suche fand ich heraus, dass die Datei symfony2 frameworks .htaccess genau das tut, was in der Datei angegeben ist. Ich habe versucht, es in meinem eigenen Setup zu verwenden, aber es hat nicht funktioniert. Vielleicht hilft euch das irgendwie.

# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the app.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
3
FitzPatrick