2012-12-19 8 views
0

je le code suivant:RewriteRule .htaccess ne fonctionne pas avec querystrings comme répertoire

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$ 
RewriteRule ^(.*)$ $1/ [R=301,L] 

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

J'ai eu des problèmes avec de l'URI absolu, il résolu. Maintenant, je veux utiliser la dernière ligne de ce qui suit:

domain.com/query/ping/2/

à

domain.com/query/ping.php?id=2

Je pense que le code est bon, mais je suis toujours en arrière erreur 404. Dois-je donner quelques réécrire les conditions? J'ai cherché ce code mais je n'ai rien trouvé d'utile.

+0

Est-ce que '/ query' est supposé être dans l'URI? Le fichier htaccess est-il dans votre répertoire 'query'? EDIT: Oh, vous êtes le gars qui a posé des questions sur le problème d'URL relative précédente, vous devriez envisager de cliquer sur la coche verte à côté des réponses correctes afin que votre question soit marquée comme "Résolu") –

+0

/query doit être là depuis est un répertoire, le .htaccess est en racine Fait, merci pour le conseil. Avez-vous une idée de ce problème? – Gregory

Répondre

0

Selon l'endroit où vous avez placé votre fichier htaccess dans votre question précédente, vous voulez probablement quelque chose comme ceci:

RewriteCond %{REQUEST_URI} ^/query/([^/]+)/([^/]+)/? 
RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f 
RewriteRule^/query/%1.php?id=%2 [L] 

L'important est que vous devez vérifier /query au début de l'URI . Ce que vous avez, ^([^\.]+)/([^\.]+)/$ ne correspondra pas à la partie /query avec les 2 chemins d'accès qui la suivent. Votre expression régulière correspond uniquement à 2 chemins d'accès.

La ligne RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f est similaire à la condition que vous avez ci-dessus où il vérifie si le fichier PHP demandé existe réellement, sinon il ne le réécrira pas aveuglément. Cette condition assure si quelqu'un essaie d'aller à:

http://domain.com/query/blahblahblahblah/blah

Votre serveur ne renvoie une erreur 404 disant /query/blahblahblahblah.php n'existe pas.

+0

Vous êtes un génie, ça marche, merci! – Gregory

Questions connexes