2010-08-08 6 views
0

mon .htaccess regarde actuellement comme ça ...Comment puis-je faire .htaccess faire ce que je veux? :) (annexant chaîne de requête à url)

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

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


RewriteRule ^(.*)$ $1.php [L,QSA] 

Il change actuellement un fichier /xxx.php dans/xxx. C'est génial pour le référencement. Cependant, je veux aussi que Mr. htaccess convertisse certaines URL en une URL + chaîne de requête. Par exemple, lorsque l'utilisateur va

/spécifique/somerandominfo

Alors somerandominfo est passé au fichier specific.php. Je n'ai normalement aucun problème à le faire en utilisant des réécritures, mais à cause de ma réécriture de catchall, je n'arrive pas à comprendre comment le faire.

Par exemple, si j'ajouter

RewriteRule ^specific/([^/]+)$ /specific.php?somerandominfo=$1 [NC] 

à mon .htaccess, puis frapper haut/spécifique/somerandominfo me sert un gros 500 erreur de service interne.

Toute aide de votre part, les gorus d'Apache seraient là, tellement cool.

Merci!

p.s. Quelqu'un veut-il également ajouter d'autres astuces cool SEO qu'ils aiment? Je vais vous faire des cookies.

Répondre

1

Vous obtenez 500 erreur parce que vos règles créent un cycle infini. Vérifiez le journal des erreurs apache pour voir si c'est vrai. Vous devriez donc concevoir vos règles correctement. Peut-être comme ça:

RewriteRule ^([^/]*)$ $1.php [L] 
RewriteRule ^(.*)/(.*)$ $1.php?var=$2 [L] 
+0

Les règles qu'il a affichées n'ont pas pu créer un cycle infini. Bien qu'il soit possible que ce soit le cas (il n'a pas publié la vraie règle qu'il a utilisée). – Artefacto

+0

En fait, ils le sont. Je les ai testés sur mon xampp. – ehpc

+0

Hé là, la règle que j'ai posté est à peu près un CC de la règle que j'utilise. Je viens de changer le nom de fichier .php de "séances d'entraînement" à spécifique et la variable $ _GET de "id" à "somerandominfo" :) Aussi, ehpc, cela crée-t-il un cas dans lequel tout fichier que je vais être traité comme un var? Par exemple, si j'ai un dossier appelé test et que ce dossier est first.php, est-ce que cet ensemble de Rewrites essayera de traiter/test/first une tentative d'envoi de var = first à test.php? Désolé si c'était une question compliquée. :) Nous vous remercions de votre aide! – Dylan

0
RewriteRule ^specific/([^/]+)$ /specific.php?somerandominfo=$1 [NC] 

Ceci est généralement correct. Je voudrais juste ajouter le drapeau B, comme ceci:

RewriteRule ^specific/([^/]+)$ /specific.php?somerandominfo=$1 [NC,B] 

Cela provoque le groupe de capture $1 être correctement échappé pour une utilisation dans les chaînes de requête. Notez que vous pouvez toujours utiliser QSA pour conserver les paramètres de requête utilisés dans la demande d'origine (en plus de somerandominfo).

Peut-être voudrez-vous publier votre RewriteRule actuelle.

+0

Salut Arte, la règle réelle que j'utilisais ressemble ... RewriteRule^séances d'entraînement/([^ /] +) /workouts.php?id=$1 $ [NC ] Lorsque j'essaie d'accéder/workouts/8, par exemple, je reçois un 500. Merci beaucoup pour votre aide! – Dylan

Questions connexes