2016-04-24 23 views
0

Ich sende jede Anfrage über eine index.php mit Ausnahme von Seiten in meinem Blog-Unterverzeichnis. Ich konnte dies mit mod_rewrite in meinem übergeordneten Ordner tun und;Warum leitet dieser mod_rewrite nicht um?

RewriteCond %{REQUEST_URI} !^/blog 
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

]

Aber ich würde auch gerne Anfragen in meinem Blog-Ordner senden, wenn sie die Form haben:

Dokumentation/some-Datei.

Ich habe versucht:

RewriteRule ^/documentation/(.+)$ https://www.some_domain.com/blog/documentation/$1 

aber es sieht wie mein Wunsch ist in diesem Fall nicht auf den Blog-Ordner gesendet zu werden. Mein vollständiger Code ist unten:

RewriteEngine On 

#redirect to index.php as appropriate 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^/documentation/(.+)$ https://www.some_domain.com/blog/documentation/$1 

RewriteCond %{REQUEST_URI} !^/blog 

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

Edit:

ich eine leicht modifizierte Version von benutzt habe @ Rijul Vorschlag unten und nach dem RewriteRule zu vor der RewriteCond bewegen, es funktioniert, wie ich gehofft hatte. Mit anderen Worten, das Umschreiben für die Dokumentation führt das Umschreiben in den Blog-Unterordner durch. Und alle anderen Anfragen gehen durch meine index.php Datei. An dieser Stelle würde ich gerne verstehen warum.

RewriteEngine On 
RewriteRule ^documentation/?(.*)$ /blog/documentation/$1 [R=301,L] 

#redirect to index.php as appropriate 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 


RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

Antwort

2

Von dem, was ich weiß,

RewriteEngine On 

Ohne diese alle Rewrite-Regeln und Bedingung

RewriteRule ^documentation/?(.*)$ /blog/documentation/$1 [R=301,L] 

Rewrites Dokumentation/Dokumentation Diese

RewriteCond %{REQUEST_FILENAME} !-d 

bloggen werden ignoriert umschreiben edition prüft, ob der angeforderte Verzeichnisname nicht beendet wird. Wenn es nicht beendet wird. Dann wird mit der nächsten Bedingung fortgefahren

RewriteCond %{REQUEST_FILENAME} !-f 

Diese Umschreibungsbedingung prüft, ob der angeforderte Dateiname nicht beendet wird. Wenn es nicht beendet wird. Dann geht in die nächste Bedingung

RewriteCond %{REQUEST_FILENAME} !-l 

Diese Rewrite Zustand überprüft, ob die angeforderte symbolische Verbindung nicht beendet. Wenn es nicht beendet wird. Dann schreitet der Regel neu zu schreiben

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

Rewrite auf index.php? Url =

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

Schreiben Umschreiben Zustand wie diese ein und Betrieb erzeugt.

(keine Datei-Exits in diesem Namen) und (keine Verzeichnis-Exits in diesem Namen) und (keine symbolische Verbindung Exits in diesem Namen)

Wenn dies wahr ist, dann umschreiben zu PHP-Datei.(kein Verzeichnis beendet in diesem Namen) wird falsch in dem Fall für /blog (da ein solches Verzeichnis beendet)

+0

Es ist halb funktioniert! Nun, wenn ich Dokumentation einfüge, funktioniert es großartig. Aber jetzt macht es keine meiner "Nicht-Dokumentation" Weiterleitungen. Zum Beispiel bin ich nicht überzeugt, dass es im "allgemeinen" Fall jemals zur letzten Zeile kommt. – Eric

+0

Können Sie eine Beispiel-URL angeben, die nicht funktioniert und das erwartete Ergebnis –

+0

Zum Beispiel, www.my_domain.com/authenticate/show-user-login-form sollte auf meine Anmeldeseite gehen (die es ohne den obigen Code tut). Oder etwas so Grundlegendes wie www.my_domain.com sollte durch index.php geleitet werden und die Homepage anzeigen. Beides passiert nicht. – Eric

Verwandte Themen