2009-09-22 6 views
2

J'ai old.htm et new.htm dans un répertoire, et j'ai besoin de charger file.php chaque fois que quelqu'un accède à old.htm, et de charger old.htm chaque fois que l'accès est nouveau. htm.Arrêt de la correspondance des règles mod_rewrite, exécution circulaire

Voici mes règles de non-travail:

RewriteRule ^old\.htm$ file.php?%{REQUEST_URI} [L] 
RewriteRule ^new\.htm$ old.htm [L] 

Lorsque old.htm est accessible, file.php est appelé. Lorsque l'on accède à new.htm, old.htm est de nouveau "accédé", en le réécrivant dans file.php. Donc, à la fin, l'accès à new.php charge file.php, mais je veux arrêter à old.htm.

Des idées?

Voici sa sortie RewriteLogLevel 3 si elle aide:

old.htm

[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/old.htm -> old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'old.htm' 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite old.htm -> file.php?/arquivoweb/old.htm 
[rid#2006ee0/initial] (3) split uri=file.php?/arquivoweb/old.htm -> uri=file.php, args=/arquivoweb/old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: file.php -> D:/dev/www/estadao/arquivoweb/file.php 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/file.php -> /arquivoweb/file.php 
[rid#2006ee0/initial] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/file.php [INTERNAL REDIRECT] 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'file.php' 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'file.php' 
[rid#200fb20/initial/redir#1] (1) [per-dir D:/dev/www/estadao/arquivoweb/] pass through D:/dev/www/estadao/arquivoweb/file.php 

new.htm

[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/new.htm -> new.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'new.htm' 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/new.htm -> new.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'new.htm' 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite new.htm -> old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: old.htm -> D:/dev/www/estadao/arquivoweb/old.htm 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/old.htm -> /arquivoweb/old.htm 
[rid#2006ee0/initial] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/old.htm [INTERNAL REDIRECT] 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/old.htm -> old.htm 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'old.htm' 
[rid#200fa90/initial/redir#1] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite old.htm -> file.php?/arquivoweb/old.htm 
[rid#200fa90/initial/redir#1] (3) split uri=file.php?/arquivoweb/old.htm -> uri=file.php, args=/arquivoweb/old.htm 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: file.php -> D:/dev/www/estadao/arquivoweb/file.php 
[rid#200fa90/initial/redir#1] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/file.php -> /arquivoweb/file.php 
[rid#200fa90/initial/redir#1] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/file.php [INTERNAL REDIRECT] 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'file.php' 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'file.php' 
[rid#20e6c70/initial/redir#2] (1) [per-dir D:/dev/www/estadao/arquivoweb/] pass through D:/dev/www/estadao/arquivoweb/file.php 

Répondre

0

Essayez de vérifier en outre l'URL demandée d'origine au lieu de simplement l'URL actuelle:

RewriteCond %{THE_REQUEST} ^GET\ /old\.html 
RewriteRule ^old\.htm$ file.php?%{REQUEST_URI} [L] 
RewriteRule ^new\.htm$ old.htm [L] 
+0

Après un peu de piratage sur la regex, je l'ai eu le travail, merci :) Il n'y a rien de mal à votre réponse, d'ailleurs! Je devais juste obtenir tous les caractères correctement sur '^ GET \/arquivoweb/[az] +/[\ d] {4}/[az] +/pas [\ d] {8} p [\ d] + \ .htm', mais ça marche! – inerte

0

Je ne sais pas ce qui va arriver avec new.htm puisque le journal semble seulement pour couvrir le cas de old.htm. Mais, essayez d'ajouter l'indicateur NS à la règle de réécriture old.htm pour l'empêcher de déclencher la sous-requête après l'introduction du script PHP.

+0

Salut jbourque, je me suis séparé le journal pour montrer ce qui est de old.htm et ce qui est de new.htm. J'ai essayé d'ajouter 'NS' dans les deux lignes et je ne pouvais pas le faire fonctionner :(Je pense que l'erreur se produit sur' redirection interne avec /arquivoweb/old.htm [REDIRECT INTERNE] 'qui devrait être une réécriture interne, Désolé, merci :) – inerte

+0

Désolé, je pense que je suis perplexe en ce qui concerne les règles de réécriture sont concernés. Pouvez-vous l'adresser avec une redirection plutôt qu'une réécriture? Ou pouvez-vous le réparer au niveau du système de fichiers, faites un lien symbolique de new.htm à old.htm plutôt que de réécrire l'URI? –

+0

Salut jbourque, les règles de réécriture que j'utilise sont un peu plus compliquées que l'exemple réduit sur ma question initiale, qui est quelque chose que j'ai testé, ne fonctionne pas, mais c'est la forme la plus simple qui émule ce que je suis essayer de faire. Il y a des dizaines de milliers de fichiers, avec des centaines de milliers de visiteurs par jour :) J'essaie d'éviter les redirections ou d'ouvrir le fichier avec php, et je m'en tiens à la réécriture. – inerte

Questions connexes