2009-03-20 5 views
6

Alors voici ce que j'essaie de faire. J'ai un framework simple et j'utilise mod rewrite pour réécrire les urls afin qu'ils pointent vers les fichiers corrects. J'ai un dossier de processus qui se trouve dans le dossier Web (le dossier Web est où tous les fichiers de site Web réels comme images, CSS, etc sont)..htaccess rediriger si le fichier n'existe pas

Cela fonctionne très bien mais ce que j'essaie de faire maintenant est d'avoir un fichier default.php pour traiter les formulaires. Le fichier fonctionne très bien si je pointe le formulaire, mais je veux être en mesure de pointer le formulaire vers son bon fichier et si le fichier n'est pas là, il utilise le default.php

Les formulaires sont créés par une classe et l'action est configurée pour aller à/{ID du formulaire} .php L'idée est que n'importe qui peut créer un formulaire en utilisant la classe et s'ils n'ont pas besoin de faire quoi que ce soit de spécial, le fichier default.php traitera le forme.

Je me rends compte que je peux simplement définir la classe de formulaire pour toujours utiliser le default.php et puis sur le fichier default.php je peux vérifier si le fichier approprié se termine. Dans le cas contraire, utilisez ce fichier, si elle ne puis continuer le traitement de la forme mais je suis toujours curieux de savoir si quelque chose comme ça fonctionnerait sur mod rewrite:

RewriteRule ^process/([^/]*) /web/process/$1 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-f 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-d 
RewriteRule ^process/([^/]*) /web/process/default.php [L] 
+0

J'ai [répondu] (http://stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-file-path-exists/471994#471994) une question [très similaire] (http : //stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-file-path-exists). –

Répondre

2

Vous devez généralement vos appels RewriteCond avant votre RewriteRule. La règle se déclenche si les conditions sont remplies.

+0

Oui, mais comment puis-je réécrire le processus/nom de fichier en web/processus/nom de fichier et si web/processus/nom de fichier n'existe pas, passez-le à web/process/default? –

+0

Est-ce que l'une ou l'autre des situations fonctionne pour vous dans le test? Il apperce que votre logique pour le cas par défaut est correcte, mais que la première règle peut être exécutée à chaque fois indépendamment. –

14

Cette règle devrait le faire seul:

RewriteCond %{DOCUMENT_ROOT}web/$0 !-f 
RewriteRule ^process/[^/]+$ web/process/default.php [L] 

Si le chemin demandé ne peut pas être mis en correspondance avec un fichier existant, il devrait être reformulé dans le fichier par défaut.

+2

+1 Cela semble fonctionner et c'est propre et compact. –

Questions connexes