GrumpyCanuck
GrumpyCanuck

Reputation: 1438

Apache mod_rewrite with multiple parameters

I've been struggling to get the following rewrite working

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

to

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

I know that mod_rewrite is working. I know that it is reading the .htaccess file, I'm just not seeing any redirecting happening. Here's what I have in my .htaccess file

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

Any help would be greatly appreciated. I imagine it is something simple, but I have not been able to figure it out. No errors in the Apache error log, and the access log is simply recording a 404.

Upvotes: 1

Views: 1640

Answers (3)

Gumbo
Gumbo

Reputation: 655755

The URL query is not part of the URL path and thus can not be processed with RewriteRule. Here you need an additional RewriteCond directive. Additionally, when you use mod_rewrite in an .htaccess file, the per-directory path prefix is removed before testing the rules and appended back after applying a rule. So in your case you would need to remove the leading / from your pattern.

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

Upvotes: 3

Yaakov Shoham
Yaakov Shoham

Reputation: 10548

Question mark ? marks the start of the QueryString, hence it's not analyzed by the RewriteRule. You should replace the ? or analyze it with RewriteCond %{QUERY_STRING} ....

Upvotes: 0

Felix Kling
Felix Kling

Reputation: 817128

Try to add RewriteBase / and skip the first slash (i.e. ^agatedepot...)

Upvotes: -1

Related Questions