mod_rewrite in <Location /> in der apache-conf verursacht umschreiben .htaccess-Datei nicht funktioniert?
Bin ich mit dem zend framework, die hat ein hübsches Beispiel .htaccess verwendet zum umleiten von nicht-vorhandenen Standorte zu index.php die Verarbeitung durch das framework:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /site/index.php [NC,L]
Und hier ist die apache-config für /site
Alias /site "/path/to/zf/project/public"
<Directory "/path/to/zf/project/public">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Während wir die Aktualisierung der Website, die ich umleiten möchten, den gesamten Datenverkehr zu einer bestimmten Datei (offline.html zum Beispiel), außer für eine bestimmte IP (127.0.0.1, zum Beispiel), so dass ich versuche, diese Regel zu verwenden, die in der apache config:
<Location />
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1
RewriteCond %{REQUEST_URI} !/offline\.html$
RewriteRule .* /offline.html [R=302,L]
</Location>
Diese scheint zu funktionieren, aber aus irgendeinem Grund macht es meine .htaccess-Datei scheinen nicht zu funktionieren. Kann ich access /site ganz gut, aber ich kann nicht gehen, noch tiefer, zum Beispiel, /site/controller/action.
Dank!
InformationsquelleAutor lakenen | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Apache 2.2 und Apache 2.4 Dokumentation von mod_rewrite deutlich, dass die rewrite-Regeln in
<Location>
Richtlinien sollte vermieden werden. Diese Vorsicht war nicht eingeschlossen in die Apache 2.0 Dokumentation.So seltsame Dinge können passieren. Sie konnte entfernen Sie die
<Location>
Abschnitt (undRewriteBase
- Richtlinie) und verwenden Sie diese neue rewrite-Regeln direkt in die<VirtualHost>
definition, ohne<Directory>
oder<Location>
Abschnitt. Es ist sogar schneller.Das einzige problem mit der globalen Ebene rewrite-Regeln ist, dass Sie nicht die
REQUEST_FILENAME
bereits berechnet (man könnte es auch hack, ein wenig, aber hier müssen Sie nicht einmalREQUEST_FILENAME
).Du hast auch einen Fehler in Ihrem
RewriteRule
verwenden Sie eine Umleitung, so die rewrite-Regel sollte eine absolute url:Über die Wartung der Seite, eine klassische Art und Weise der Handhabung ist er mit diesen beiden Zeilen:
Wo Sie nicht filtern Sie die lokale IP, aber der interessante Teil ist, dass der code für die Wartung 503 (vorübergehend nicht verfügbar) das ist mehr korrekt (die in der Tat ein redirect 307 ist noch mehr korrekte, aber ältere browser könnten Probleme damit haben). Tun das gleiche mit einer lokalen IP-Beschränkung und eine
RewriteRule
wäre es:InformationsquelleAutor regilero
Haben diese Regeln in der htaccess-Datei, die Sie haben, um hinzuzufügen/entfernen Sie von hand, wenn Sie verwenden möchten "offline-Modus".
Einen besseren Weg, dies zu tun, durch die Anwendung ist die Erstellung einer controller-plugin.
Wenn die
APPLICATION_ENV = 'offline'
das plugin tun würde_forward('offline', 'error', 'default');
Alternativ könnten Sie schreiben, die Logik in einer Subklasse von Zend_Controller_Action, die Sie verwenden Sie als Basisklasse für Ihren Controller.
InformationsquelleAutor adlawson