2009-06-12 13 views
11

Ich möchte mod_rewrite verwenden, um hübsche URLs zu erstellen, aber ich habe eine einzige Version der .htaccess-Datei, die für jeden Benutzer auf einem Server verwendet werden kann.Wie referenziere ich das aktuelle Verzeichnis von .htaccess mit mod_rewrite?

Bisher habe ich den Standard ziemlich URL .htaccess:

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

Idealerweise würde ich etwas Ähnliches wie

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

Diese Dokumentation mir, dass ich will, was zu glauben, würde dazu führen mag, ist nicht erforderlich:

Hinweis: Mustererkennung in per-Verzeichnis con text Vergessen Sie nie, dass Pattern auf eine vollständige URL in pro-Server-Konfigurationsdateien angewendet wird. In pro-Verzeichnis-Konfigurationsdateien wird jedoch das pro-Verzeichnis-Präfix (das für ein bestimmtes Verzeichnis immer gleich ist) automatisch für den Musterabgleich entfernt und nach der Ersetzung automatisch hinzugefügt. Diese Funktion ist für viele Arten des Neuschreibens von grundlegender Bedeutung - ohne das müssten Sie immer dem übergeordneten Verzeichnis entsprechen, was nicht immer möglich ist.

ich immer noch das falsche Ergebnis erhalten, obwohl, ob ich ein vor dem index.php auf dem RewriteRule führenden/setzen. Diese

,

http://server/test/stream/stream

verwandelt sich in

http://server/index.php/stream

nicht

http://server/test/index.php/stream

wenn die .htaccess-Datei in/test /.

+0

Auch https://stackoverflow.com/q/4704508/632951 – Pacerier

Antwort

2

Stellt sich heraus, dass es egal ist, ob ich eine führende/vor Index.php oder nicht setzen. Wenn Sie das Skript nicht verwenden, funktioniert es ordnungsgemäß. Ich hatte mit dem R-Flag getestet, das physische Verzeichnisse auf dem Redirect verwendet.

+0

Ja, ** aber ** [durch Weglassen Sie auf das vertrauen Wert von rewritebase] (https://stackoverflow.com/a/11443194/632951), der ** möglicherweise nicht Ihr htaccess Elternordner ist. Auf jeden Fall ist es eine hackische Lösung, die keine wirkliche Lösung darstellt. – Pacerier

8

ich ein ähnliches Problem habe, fand aber, dass einfach die Wurzel Weglassen '/' in meinem Test-Web-Server geführt (xampp auf Windows), um eine URL ähnlich dienen:

http://localhost/C:/xampp/htdocs/sites/test/

Nicht perfekt. Meine Lösung besteht darin, einen RewriteCond zu verwenden, um den Pfad von REQUEST_URI zu extrahieren. Hier ist ein Beispiel für das Entfernen des unerwünschten „index.php“ s vom Ende der URL:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

Hinweis: das Prozentzeichen in „% 1 /“, eher als ein Dollar-Zeichen.

% 1-% 9 erhält die Muster vom letzten passenden RewriteCond, $ 1- $ 9 erhält die Muster von der RewriteRule.

See: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

Prost :)

Verwandte Themen