2009-05-16 7 views
8

Je suis vouloir prendre une URL telle que http://localhost/universe/networks/o2/o2_logo.gif et procédez comme suit:En utilisant% {REQUEST_URI} modifié dans le fichier RewriteCond existe vérifier

 
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. 

Si j'utilise une règle de:

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

http://localhost/universe/networks/o2/o2_logo.gif est ré-écrit à http://www.example.org/networks/o2/o2_logo.gif qui est grand, mais je ne peux pas sembler utiliser le

Comment puis-je aller sur l'utilisation de cette « changé » % {REQUEST_URI} plus faire wn comme dire $ 1 ou quelque chose?

Répondre

16

je n'étais pas en mesure d'obtenir ce droit purement avec .htaccess mais utilisé le fichier suivant:

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 

Puis je suis entré dans mon dossier document_root et a fait la suivant:

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

Cela combiné avec le htaccess signifiait tout fonctionnait.

+0

C'est une merveilleuse réponse. J'ai essayé les idées de plusieurs autres personnes et j'ai découvert cela. Man ... htaccess est un enfer d'un fichier de configuration ... – MikeMurko

1

Essayez cette règle:

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

On dirait que c'est dans la bonne direction. Mon .htaccess contient ceci: # L'entrée existe-t-elle dans le dossier de contenu? RewriteCond% {DOCUMENT_ROOT}/univers/public/content/$ 1 -f RewriteRule^univers /(.*) http: // localhost: 81/exists/$ 1 [L] RewriteRule^univers /(.*) http: // localhost: 81/not_exists/$ 1 [L] Toujours générer un 404 si je m'attends à ce qu'il suive l'une des deux RewriteRules au moins? Que pourrais-je manquer pour ignorer cela? Le contenu est dans C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ universe \ public \ content – Alistair

+0

désolé pour le formatage là ... – Alistair

+0

Oh, donc vous voulez le passer à travers un serveur dans le réseau local. Ensuite, vous devez utiliser un proxy. Ajoutez simplement le drapeau P aux règles. – Gumbo

Questions connexes