2008-11-12 6 views
4

Étant donné mon fichier .htaccess actuel, comment le modifier pour vérifier un chemin d'URL supplémentaire comme '/ src/pub/' et le réécrire en '/' sans affecter la réécriture actuelle?Comment est-ce que mod_rewrite supprime le traitement de plus de règles?

Voici le fichier .htaccess d'origine:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] 

et voici ma dernière tentative (ce qui ne fonctionne pas):

RewriteEngine on 

RewriteRule ^/src/pub/(.*)$ /$1 [R] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] 

Edit: Voici quelques exemples de ce que je veux à accomplir:

Nouvelle règle supplémentaire:

From: http://www.mysite.com/src/pub/validfile.php 
To: http://www.mysite.com/validfile.php 

From: http://www.mysite.com/src/pub/user/detail/testuser 
To: http://www.mysite.com/user/detail/testuser 

Règle existante (déjà de travail):

From: http://www.mysite.com/user/detail/testuser 
To: http://www.mysite.com/index.php?route=user/detail/testuser 
+0

Qu'est-ce que votre tentative faire est pas? Quelques exemples (corrects et incorrects) aideraient à comprendre ce que vous recherchez. – TimB

Répondre

5

Je suppose que le problème est que l'URL est réécrite par la première règle, puis réécrit à nouveau par le second.

La solution qui est d'ajouter le "dernier" drapeau à la première règle, comme ceci:

RewriteRule ^/src/pub/(.*)$ /$1 [R,L] 
3

dans un fichier .htaccess, utilisez ceci:

RewriteRule ^src/pub/(.*)$ /$1 [R] 

le leader "/" ne sera pas correspondre dans .htaccess, seulement dans httpd.conf (src - bas de la page) si vous souhaitez que d'autres règles soient arrêtées, puis ajoutez le drapeau L:

RewriteRule ^src/pub/(.*)$ /$1 [L,R] 

rewrite comparaison du journal (contexte .htaccess):

// using ^/src/pub/(.*)$ - leading slash will not work in .htaccess context! 
(1) pass through /home/test/src 

// using ^src/pub/(.*)$ 
(2) rewrite 'src/pub/testme' -> '/testme' 
(2) explicitly forcing redirect with http://test/testme 
(1) escaping http://test/testme for redirect 
(1) redirect to http://test/testme [REDIRECT/302] 
Questions connexes