2009-05-16 4 views
8

Ich will eine URL wie http://localhost/universe/networks/o2/o2_logo.gif nehmen und wie folgt vorgehen:geändert% Arbeiten mit {} REQUEST_URI in RewriteCond Datei vorhanden überprüfen

 
If it begins with /universe/ 
Strip /universe/ from it to become /networks/o2/o2_logo.gif 
Check if this exists in %{DOCUMENT_ROOT}/networks/o2/o2_logo.gif 
If so, silently rewrite the request to this file. 

Wenn ich eine Regel verwenden:

 
RewriteCond %{REQUEST_URI} ^/universe/ 
RewriteRule ^(.*)$ http://www.example.org/$1 [L] 

http://localhost/universe/networks/o2/o2_logo.gif wird auf http://www.example.org/networks/o2/o2_logo.gif neu geschrieben, das groß ist, aber ich kann nicht das

Wie kann ich über die Verwendung dieses ‚geändert‘% {} REQUEST_URI weiter tun gehen zu verwenden scheine Wn wie $ 1 oder etwas sagen?

Antwort

16

war ich nicht in der Lage dies mit .htaccess richtig rein zu bekommen, aber verwendet die folgende Datei:

RewriteEngine On 

# Does the file exist in the content folder? 
RewriteCond %{REQUEST_URI} !^/content.* 
RewriteCond %{DOCUMENT_ROOT}/universe/%{REQUEST_URI} -f 

# File Exists 
RewriteRule^%{DOCUMENT_ROOT}/universe/%{REQUEST_URI} [L] 

# If the request is not a file, link or directory then send to index.php 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] # Item exists so don't rewrite 

# Nothing exists for the request so append a trailing/if needed 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule^%{REQUEST_URI}/ [R=301,L] 

RewriteRule ^.*$ index.php [NC,L] # Send off as-is to index.php 

Dann habe ich in meinen document_root Ordner gingen hin und taten das folgende:

cd /var/www/journal 
ln -s journal/public universe 
cd /var/www/journal/public 
ln -s content/ universe 

Das kombiniert mit der htaccess bedeutete alles funktionierte.

+0

Das ist eine wunderbare Antwort. Ich habe die Ideen anderer Leute ausprobiert und dann entdeckt. Man ... htaccess ist eine höllische Konfigurationsdatei ... – MikeMurko

1

Versuchen Sie, diese Regel:

RewriteCond %{DOCUMENT_ROOT}$1 -f 
RewriteRule ^universe/(.*) $1 [L] 
+0

Sieht aus wie es in die richtige Richtung geht. Mein .htaccess enthält das: # Existiert der Eintrag im Inhaltsordner? RewriteCond% {DOCUMENT_ROOT}/universum/public/content/$ 1 -f RewriteRule^universum /(.*) http: // localhost: 81/existiert/$ 1 [L] RewriteRule^universum /(.*) http: // localhost: 81/not_exists/$ 1 [L] Erzeugt immer noch ein 404, wenn ich erwarte, dass es mindestens einer der beiden RewriteRules folgt? Was könnte ich vermissen, um das zu ignorieren? Inhalt ist in C: \ Programme \ Apache Software Foundation \ Apache2.2 \ htdocs \ universum \ public \ content – Alistair

+0

Entschuldigung für die Formatierung ... – Alistair

+0

Oh, also möchten Sie es an einen Server in der übergeben lokales Netzwerk. Dann müssen Sie einen Proxy verwenden. Fügen Sie einfach das P-Flag zu den Regeln hinzu. – Gumbo

Verwandte Themen