2009-05-16 8 views
8

ja chcąc wziąć URL takiego jak http://localhost/universe/networks/o2/o2_logo.gif i wykonaj następujące czynności:Korzystanie zmieniany% {REQUEST_URI} w pliku RewriteCond istnieje sprawdzić

 
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. 

Jeśli używam zasadę:

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

http://localhost/universe/networks/o2/o2_logo.gif zostanie ponownie zapisywane http://www.example.org/networks/o2/o2_logo.gif co jest dobre, ale nie wydaje się użyć

Jak mogę iść o używaniu tego „zmieniony”% {REQUEST_URI} dalej robić jak powiedzmy 1 $ czy coś takiego?

Odpowiedz

16

I nie był w stanie uzyskać prawo to czysto z .htaccess, ale używany następujący plik:

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 

Potem poszedłem do mojego folderu document_root i zrobił następujący:

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

To w połączeniu z htaccess oznaczało, że wszystko działało.

+0

To jest cudowna odpowiedź. Wypróbowałem kilka pomysłów innych ludzi, a następnie odkryłem to. Man ... htaccess to piekło pliku konfiguracyjnego ... – MikeMurko

1

Spróbuj zasadę:

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

Wygląda na to, że zmierza we właściwym kierunku. Mój .htaccess zawiera: # Czy pozycja istnieje w folderze treści? RewriteCond% {DOCUMENT_ROOT}/universe/public/content/$ 1 -f RewriteRule^universe /(.*) http: // localhost: 81/exists/$ 1 [L] RewriteRule^universe /(.*) http: // localhost: 81/not_exists/1 $ [L] Nadal generuje 404, ale gdy spodziewam się, że po jednym z dwóch RewriteRules co najmniej? Czego mógłbym przegapić, aby to zignorować? Zawartość jest w C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ universe \ public \ content – Alistair

+0

Przepraszam za formatowanie ... – Alistair

+0

Och, więc chcesz przekazać to do serwera w lokalna sieć. Następnie musisz użyć proxy. Po prostu dodaj flagę P do reguł. – Gumbo