2010-08-11 3 views
0

Cela devrait être simple, mais je ne peux pas le comprendre. J'ai cette règle mod_rewrite très simple et elle ne veut tout simplement pas fonctionner. C'est tout le contenu du fichier .htaccess.Pourquoi ce simple RewriteRule ne fonctionnera-t-il pas?

RewriteEngine On 
RewriteRule ^([A-Za-z0-9-_/\.]+)/?$ index.php?page=$1 [L] 

Si j'appelle l'URL domain.com/foo il devrait le réécrire en index.php? Page = foo. Mais à la place, il réécrit à index.php? Page = index.php. J'ai essayé plusieurs URL:

  • index.php page = toto
  • index.php
  • /foo
  • /

Dans tous les cas, PHP agit comme page 'est défini sur "index.php". Ce n'est pas une faute avec index.php parce que j'ai remplacé tout le contenu de index.php par un script qui fait écho à la valeur de 'page' et qui sort toujours comme index.php. Vraiment perdu là où je me trompe, toute aide serait géniale!

Merci

Adrian

Répondre

2

une raison quelconque vous ne pouvez pas utiliser quelque chose de simple, comme:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

Si vous essayez de garder les pages existantes d'être réécrits, puis le !-f prendra soin de cela (if file does not exist et if directory does not exist, puis re-write)

+0

Je n'y avais pas pensé (en évitant de réécrire des pages réelles), mais c'est certainement quelque chose que je dois faire! Cela fonctionne pour moi, merci! –

0

Je pense que c'est ce que vous cherchez. Malheureusement, cela ne fonctionne pas vraiment bien si l'URL a d'autres arguments GET (IE,/some/url/path? Page = 1).

RewriteEngine On 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

Meilleure idée.

RewriteEngine On 
RewriteRule ^(.*)$ index.php [L,QSA] 

Le drapeau QSA transmettra l'EEG params puis en cours d'utilisation index.php $_SERVER['REQUEST_URI'] et parse_url pour acheminer la demande.

De http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html:

'qsappend|QSA' (query string append) 
This flag forces the rewriting engine to append a query string part 
in the substitution string to the existing one instead of replacing it. 
Use this when you want to add more data to the query string via a rewrite rule. 
+0

Pour l'instant je n'aurai pas multip J'obtiens des arguments, j'ai juste besoin que ça marche pour le moment. J'ai essayé ce que tu m'as donné et ça produit toujours le même résultat. –