2010-03-04 4 views
1

cet extrait

RewriteEngine on 

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

RewriteCond $1 !^(index\.php|images|img|css|js|robots\.txt) 
RewriteRule (.*) index.php?/$1 [L] 

Il ne me permet pas d'accéder à un fichier à website.com/js/main.php mais cela me permet d'accéder index.php

Selon mon webhost, $ 1 est appelé avant d'être défini. Des solutions?

Je vais accepter les réponses quand je reviens demain. Je vous remercie!

+0

Le lien dans le commentaire de Gubmo est vraiment utile, mais l'URL semble maintenant être: http://httpd.apache.org/docs/2.2/rewrite/tech.html#InternalRuleset – chutz

Répondre

1

Je suppose que vous voulez que la réécriture ignore les choses que votre condition spécifie actuellement. Dans ce cas ...

RewriteEngine on 

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

RewriteCond !^(index\.php|images|img|css|js|robots\.txt) 
RewriteRule (.*) index.php?/$1 [L,QSA] 

... devrait fonctionner correctement. Vous aurez probablement besoin de la QSA là-bas, de sorte que s'il y a une chaîne de requête, elle est correctement gérée.

+0

Ne semble pas fonctionner, ça donne moi 500 erreurs maintenant. Merci bien – jiexi

+1

Vous pourriez essayer de le remplacer par 'RewriteCond% {REQUEST_URI}!^(Index \ .php | images | img | css | js | robots \ .txt)' au lieu d'être explicite – Amber

0

Votre hébergeur est dans l'erreur. Le order of ruleset processing est:

  1. modèle dans RewriteRule est testé (qui renseignera les $N références avec des valeurs)
  2. associées RewriteCond conditions sont testées (le cas échéant)

uniquement si le motif correspond au courant Le chemin de l'URL et la condition associée sont remplis, le motif est appliqué.

Dans votre cas, le modèle (.*) est testé sur le chemin d'accès URL actuel js/main.php (sans le préfixe local /). Il correspond ($0 = js/main.php, $1 = js/main.php) de sorte que les trois conditions associées sont testées dans l'ordre où ils apparaissent:

  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond $1 !^(index\.php|images|img|css|js|robots\.txt)

En supposant que l'URL demandée le chemin /js/main.php ne fait pas référence à un fichier ou un répertoire existant, les premières conditions sont toutes deux vraies. Mais le troisième évaluera à faux comme $1 = js/main.php et le modèle ^(index\.php|images|img|css|js|robots\.txt) correspond (branche ^js) js/main.php. La condition n'est donc pas remplie et la règle n'est pas appliquée.