2009-05-16 11 views
8

Sono voler prendere un URL come http://localhost/universe/networks/o2/o2_logo.gif e procedere come segue:Utilizzando% alterato {} REQUEST_URI nel file di RewriteCond esiste controllare

 
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. 

Se io uso una regola di:

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

http://localhost/universe/networks/o2/o2_logo.gif ottiene ri-scritti http://www.example.org/networks/o2/o2_logo.gif che è grande, ma io non riesco a utilizzare la

Come posso andare sull'utilizzo di questa% 'cambiato' {} REQUEST_URI ulteriormente fare come dire $ 1 o qualcosa del genere?

risposta

16

non ero in grado di ottenere questo diritto puramente con .htaccess ma abbiamo usato il seguente file:

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 

poi sono andato nella mia cartella document_root e ha fatto il seguente:

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

Questo combinato con l'htaccess significava che tutto funzionava.

+0

Questa è una risposta meravigliosa. Ho provato diverse idee di altre persone e poi ho scoperto questo. Uomo ... htaccess è un diavolo di un file di configurazione ... – MikeMurko

1

Prova questa regola:

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

Sembra che stia andando nella giusta direzione. Il mio .htaccess contiene questo: # La voce esiste nella cartella dei contenuti? 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] Ancora genera un 404 anche se mi aspetto che segua almeno uno dei due RewriteRules? Cosa potevo mancare perché ignorasse questo? Il contenuto è in C: \ Programmi \ Apache Software Foundation \ Apache2.2 \ htdocs \ universe \ public \ content – Alistair

+0

scusa per la formattazione ... – Alistair

+0

Oh, quindi si desidera passare a un server nel rete locale. Quindi è necessario utilizzare un proxy. Basta aggiungere la bandiera P alle regole. – Gumbo

Problemi correlati