2010-10-30 6 views
0

Je me bats pour ce faire chose simple ...règles Réécrire confus

J'ai quelques pages statiques qui devrait être comme
www.domain.com/profile etc .. Le problème est de savoir comment écrire le réécrire les règles pour ..

Il y aurait des réécritures fixes comme/home

Je veux que chaque fichier qui existe ne doit pas être réécrite www.domain.com/test.php devrait aller à essai .php

Enfin si elle ne se trouve pas je veux qu'il soit redirigé vers static.php? _.....

RewriteRule ^/home/?$ /index.php?__i18n_language=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/([^/]+)/?$ /static.php?__i18n_language=$1 

Cela fonctionne bien, mais si je tape index.php ou test.php ou même le mach d'autre redirection il me obtient dans static.php ... S'il vous plaît, aidez!

Répondre

1

Selon votre description, vous pouvez utiliser ces règles:

# stop rewriting process if request can be mapped onto existing file 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteRule^- [L] 

# rewrite known paths /home, /foo, /bar, etc. 
RewriteRule ^/(home|foo|bar|…)$ /index.php [L] 

# rewrite any other path 
RewriteRule^/static.php [L] 
+0

merci .. Le problème est que REQUEST_FILENAME na pas retourne le chemin complet! corrigé avec l'ajout du préfixe document racine racine – GorillaApe

+0

@Parhs: Oh oui, c'est possible: "Le chemin complet du système de fichiers local vers le fichier ou le script correspondant à la requête, si cela a déjà été déterminé par le serveur au moment" REQUEST_FILENAME " référencé Sinon, par exemple lorsqu'il est utilisé dans un contexte d'hôte virtuel, la même valeur que 'REQUEST_URI'." (Voir la directive ['RewriteCond'] (http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond)) – Gumbo

1

Je n'ai pas utilisé cela depuis longtemps, mais c'est quelque chose que j'ai trouvé, qui devrait aider. Il fait partie d'un ancien script qui génère des fichiers .httaccess pour rediriger depuis /usr/share/doc uniquement lorsque le document n'est pas trouvé: La règle est "Vérifier, et si l'URL cible existe, alors laissez « :

RewriteEngine On 
RewriteBase /doc/User_Documents 

### If the directory already exists, then leave 
### We're just redirecting request when the directory exists but has been renamed. 

RewriteCond %{REQUEST_FILENAME} User_Documents/([^/]+-[0-9][^/]*) 
RewriteCond $PWD/%1 -d 
RewriteRule .* - [L] 

Il est le [L] cela signifie laisser si l'une des conditions est adaptée. Dans l'ancien script, des centaines de règles générées (après [L]) sont ignorées, car l'une des conditions correspondait. Dans votre cas, vous passez le reste des règles lorsque la cible %{REQUEST_FILENAME} est trouvée.

Donc, je suggère, avant que la règle de redirection:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L]