alvaromat
alvaromat

Reputation: 87

Wrong $_GET params using MOD rewrite

I am trying to make my url more friendly, from domain/link/link.php?id=123 to domain/link/123

I have written the following rule:

RewriteEngine On
RewriteRule ^([^/]*)$ link.php?id=$1 [L]

It is on a .htaccess in /link folder.

In my link.php file I have:

echo $_GET['id'];

But the result is always "link.php" without quotes, instead of the number or string.

What am I doing wrong?

Upvotes: 2

Views: 30

Answers (2)

jeroen
jeroen

Reputation: 91734

You have specified that it is the last rule using the L flag, but as soon as the rewritten url is requested, it will be rewritten again.

There are 2 possible solutions:

  1. Check if the file exists and only rewrite if it does not;
  2. Restrict your rewriting rules so that it only looks for numbers.

An example of the first option:

RewriteEngine On

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

(note that I have changed * zero or more with + one or more)

An example of the second option:

RewriteEngine On
RewriteRule ^(\d+)$ link.php?id=$1 [L]
              ^^^ Look for 1 or more digits

Upvotes: 0

maalls
maalls

Reputation: 759

Try

RewriteEngine On
RewriteRule ^link/([0-9]+)$ link.php?id=$1 [L]

Upvotes: 1

Related Questions