7

I need to redirect

/search?keywords=somesearchterm

to

/search/somesearchterm

This seems incredibly basic but I've been pounding my head against it for an hour.

Thanks for taking the time to look at this.

2 Answers 2

11

You want to implement what is called a "301 Redirect" with mod_rewrite.

RewriteEngine ON
RewriteRule ^/search\?keywords=somesearchterm$ /search/somesearchterm

adding regular expressions:

RewriteEngine ON
RewriteRule ^/search\?keywords=(.+) /search/$1 [R=301,L]

R=301 means provide a 301 Header redirect so the user's URL changes in the browser, and L means don't process any more rewrite rules if this one matches.


If you want to do the reverse -- in other words, if someone goes to mysite.com/search/asearchterm and you want the URL to stay the same, but "behind the scenes" you want it to load a certain server script, do this:

RewriteEngine ON
RewriteRule ^/search/(.+) /search.php\?keywords=$1 [L]
Sign up to request clarification or add additional context in comments.

Comments

0

You can not match aginst Query string in RewriteRule directive. Use %{THE_REQUEST} or %{QUERY_STRING} server variables to match the Query string :

The following rule works fine for this redirection

 RewriteEngine On
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/search\?kewords=([^&\s]+) [NC]
 RewriteRule ^ /search/%1? [NE,NC,R,L]

RewriteRule ^search/([^/]+)/?$ /search?keyword=$1 [QSA,NC,L]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.