2010-07-11 5 views
0

J'ai ajouté un fichier .htaccess à mon dossier racine, et je voulais que tout ce qui était écrit après le/soit envoyé au fichier index.php pour obtenir des données.Pourquoi .htaccess ne reçoit que l'index.php en entrée

Mon chemin racine ressemble à ceci http://www.site.com/folder/ et mon .htaccess se trouve dans le répertoire du dossier ainsi que index.php

Ceci est mon fichier .htaccess:

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule (.*) index.php?args=$1 

Maintenant, ce que jamais j'écris derrière le dossier/dans mon URL, args est "index.php". Donc, quand je visite www.site.com/folder/lots/of/bogey la variable args est "index.php"

Mon objectif est évidemment d'avoir la variable args être "lots/de/bogey". Des idées de ce que je fais mal?

Répondre

0

Je pense que c'est parce qu'après l'exécution de la RewriteRule et l'obtention index.php?args=... le RewriteRule est appelé à nouveau. Maintenant, index.php est votre nom de fichier, il est donc passé en arguments. Après ce mod_rewrite avorte en raison de la récursivité. Pour résoudre ce problème, ajoutez un RewriteCond, ce qui signifie que le fichier n'est pas index.php.

0

Vous aurez au moins pour exclure index.php du redirect:

RewriteCond $0 !^index\.php$ 
RewriteRule .* index.php?args=$0 [QSA,B] 
+0

Ce serait mieux pour mes tags d'image si je pouvais exclure toute entrée contenant ".". Pourriez-vous me montrer comment faire ça? – Hubro

+0

@Code Substitue la réécriture que j'ai donnée pour 'RewriteCond $ 0! \.'. Puisque "index.php" a un point, ceci récupère aussi le cas de index.php – Artefacto

+0

RewriteCond $ 0! \. est ce que j'ai fait, et cela a fonctionné des merveilles. Merci – Hubro

1

Vous n'avez pas besoin RewriteCond. Ce qui suit fonctionne:

RewriteRule ^(.*)$ index.php?args=$1 [L,QSA] 

La L fait arrêter correspondant à des règles de réécriture et QSA est pour annexant d'interroger la chaîne dans une règle de réécriture. Reportez-vous à mod_rewrite

+0

Pourriez-vous expliquer ce que les drapeaux font? thx – Hubro

+0

Non, cela ne fonctionnera pas. Même si c'est le [L] ast RewriteRule dans cette passe, mod_rewrite se rappellera avec le nouveau nom de fichier réécrit - qui sera index.php! – NikiC

+0

@nikic. Qu'est-ce que vous voulez dire que cela ne fonctionnera pas? J'ai effectivement testé cela et cela a fonctionné. – grom