GeorgeKaf
GeorgeKaf

Reputation: 613

url rewriting in .htaccess

I am trying to serve different urls using mod_rewrite but whatever I try it is just not working.

An example url would be http://www.site.com/country/tours/dynamic-part/?&city=new-york,los-angeles

And I am trying to change the url using .htaccess to:

http://www.site.com/country/tours/dynamic-part/new-york,los-angeles

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} (^|&)city=([^&]*)(&|$)
RewriteRule ^country\/tours\/([a-zA-Z0-9]*)\/.+city=([^\/]*)$ http://www.site.com/country/tours/$1/$2 [L,R=301]

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Any ideas? I though I was close but not anymore :/

Upvotes: 1

Views: 80

Answers (1)

barryhunter
barryhunter

Reputation: 21091

The RewriteRule does NOT match the query string, see http://httpd.apache.org/docs/current/mod/mod_rewrite.html#what_is_matched

So the .+city part of the rule will never match.

This should work tho...

RewriteCond %{QUERY_STRING} (^|&)city=([^&]*)(&|$)
RewriteRule ^country\/tours\/([a-zA-Z0-9]*)\/ http://www.site.com/country/tours/$1/%2 [L,R=301]

The subsitution can read back-referenecs to the RewriteCond pattern.

Upvotes: 2

Related Questions