2009-11-02 5 views
0

Je cherche à configurer une application où il y a un espace de noms de base et de projet, où le noyau est la solution de repli par défaut à la personnalisation de projet. à cet ID final comme pouvoir en cascade diverses ressources comme css, javascript, etc. aux fins du excersize, ive simplifié ce queSélection de ressources en cascade à l'aide de mod_rewrite

./.htaccess 
./first/firstonly.txt 
./first/both.txt 
./second/secondonly.txt 
./second/both.txt 

comportement attendu serait une demande vérifierait pour l'existence avant de chercher en second lieu, et enfin lancer 404.

pour baseurl/firstonly.txt frapperait ./first/firstonly.txt (200), alors que
baseurl/secondonly.txt essaieraient ./first/secondonly.txt (404) puis ./second/secondonly.txt (200).
baseurl/both.txt taperait ./first/both.txt (200) et n'irait pas plus loin.
baseurl/nonexistant.txt (404) traverserait les cascades et le retour 404.

Je suis assez compétant avec mod_rewrite, donc ne se sentent pas le besoin de parler de base ici. Quelle serait la manière la plus efficace (saine) de mettre en œuvre ceci? Les soucis de vitesse mis à part, comme la plupart du temps les choses seront trouvées sur le premier coup.

Répondre

0
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule ^Public/(.*)$ Application/Public/$1 [L] 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 

RewriteRule ^(css|scripts|images|assets|flash)/(.*)$ Public/$1/$2 [L] 

Ceci est la solution de travail finale (en dehors de l'exemple de bac à sable ci-dessus).

0

Essayez ces règles:

RewriteEngine on 
RewriteRule ^(first|second)/ - [L] 
RewriteCond %{DOCUMENT_ROOT}/first/$0 -f 
RewriteRule ^[^/]+$ first/$0 [L] 
RewriteCond %{DOCUMENT_ROOT}/second/$0 -f 
RewriteRule ^[^/]+$ second/$0 [L] 
+0

Ah oui, eh bien c'est une solution similaire à ce que je viens de trouver, mais cela dépend de la racine du projet étant dans la racine du document, ce qui n'arrive pas toujours. Il doit être capable de travailler avec bonheur par rapport au .htaccess (qui est le point de blocage actuel) – jhogendorn

+0

@devians: Essayez 'RewriteCond first/$ 0 -F' à la place. – Gumbo

+0

faire des contrôles de réécriture comme ça ne semble pas fonctionner, il faut le chemin complet – jhogendorn

0

D'autres solutions possibles

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^first 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^(first|second).*$ 
RewriteRule .* /404.html [L] 

ou

RewriteCond %{REQUEST_URI} 404.html 
RewriteRule .* - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^first 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^(first|second).*$ 
RewriteRule .* /404.html [L] 

Dans mes tests personnels im Remarquant que le chèque -f est exacte seulement contre une chemin d'accès complet, ce qui rend les choses difficiles si vous n'êtes pas dans la racine du document. Est-ce que cela peut être adressé en réécrivant dans le fichier, puis en faisant -f sur le request_uri?