2010-01-05 5 views
1

J'ai lutté pour obtenir le travail de réécriture suivanteApache mod_rewrite avec plusieurs paramètres

^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) 

à

/agateDepot.php?date=$1&filename=$2&doc-id=$3 

Je sais que mod_rewrite fonctionne. Je sais qu'il lit le fichier .htaccess, je ne vois pas de redirection. Voici ce que j'ai dans mon fichier .htaccess

RewriteEngine On 
RewriteRule ^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) /agateDepot.php?date=$1&filename=$2&doc-id=$3 

Toute aide serait grandement appréciée. J'imagine que c'est quelque chose de simple, mais je n'ai pas été capable de le comprendre. Aucune erreur dans le journal des erreurs Apache, et le journal d'accès est tout simplement l'enregistrement d'un 404.

+1

Cette question convient mieux à ServerFault. –

+0

Vous devriez donner un exemple d'URL concrète pour les tests. –

+0

sure /agatedepot/2010.01.03/a_bunch_of_text.txt?doc-id=xt.l.nfl.com.7182032 – GrumpyCanuck

Répondre

3

La requête d'URL ne fait pas partie du chemin de l'URL et ne peut donc pas être traitée avec RewriteRule. Ici, vous avez besoin d'un RewriteCond directive supplémentaire. En outre, lorsque vous utilisez mod_rewrite dans un fichier .htaccess, le préfixe de chemin par répertoire est supprimé avant de tester les règles et d'être ajouté après l'application d'une règle. Donc, dans votre cas, vous devez supprimer le premier / de votre modèle.

RewriteCond %{QUERY_STRING} ^doc-id=([0-9a-zA-Z._\-]+)$ 
RewriteRule ^agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)$ agateDepot.php?date=$1&filename=$2&doc-id=%1 
+0

Fonctionne parfaitement. Merci beaucoup! – GrumpyCanuck

+0

Si vous souhaitez simplement ajouter la requête demandée à la nouvelle requête, vous pouvez également définir l'indicateur * QSA *. – Gumbo

-1

Essayez d'ajouter RewriteBase / et sauter la première barre oblique (^agatedepot...)

0

marque Question ? marque le début de la chaîne de requête, d'où il n'est pas analysé par le RewriteRule. Vous devez remplacer le ? ou l'analyser avec RewriteCond %{QUERY_STRING} ....

Questions connexes