Duane Lortie
Duane Lortie

Reputation: 1260

Getting pretty URLs with a GET form

I'm trying to make dynamic/pretty urls like domain.com/p/term

In my case /p is actually a PHP script, via an .htaccess entry.

<Files "p">
  ForceType application/x-httpd-php
</Files>

and term is a search term, used to fetch relevant data from a database

So, if the "/term" part is provided in the URL everything is good. The problem is, if the request is just "domain.com/p/" with no term, I need to show a form asking for a term, and since I want the term the viewer enters to be displayed in the URL, I thought I should use a GET form. Super basic.. or so it seems :/

<form action="/p/" method="GET">
<input type="text" name=pid>
<input type="submit">
</form>

When submitted, it results in the URL being domain.com/p/?pid=term

Now, I just need to find how to mod rewrite that to domain.com/p/term

I've tried numerous re-write rules and can't get the desired result... My latest attempts...

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Rewrite GET search "/p?pid=term" => "/p/term"
RewriteRule ^p\?pid=(.*)$ /p/$1 [L]

#Rewrite GET search "/p/?pid=term" => "/p/term"
RewriteRule ^p/\?pid=(.*)$ /p/$1 [L]

Neither seem to be triggering the rewrite, I still get /p/?pid=term in the address bar.

I've looked over several related questions, but none seem to address this scenario. A tap with a clue stick would be greatly appreciated.

Upvotes: 2

Views: 119

Answers (2)

Dharmindar
Dharmindar

Reputation: 437

It should be as follows

RewriteRule ^p/([0-9a-z]+) p/?pid=$1

Upvotes: 0

Amit Verma
Amit Verma

Reputation: 41219

You can not match against QueryString (Url part after the ?) using a RewriteRule. You need to match against %{QUERY_STRING} variable

RewriteEngine on


RewriteCond %{QUERY_STRING} ^pid=(.+)$
RewriteRule ^p/?$ /p/%1? [L,R]

Upvotes: 1

Related Questions