Chris
Chris

Reputation: 21

htaccess adding query string to 301 redirect

Can sombody help me out with this, im trying to re direct a page using htaccess file but it keeps adding ?c=oldpage on to the end of the new url, example:

http://www.mydomain.co.uk/newpage.html?c=oldpage

i have tried some of the solutions posted here but no luck, here is my .htaccess file:

DirectoryIndex index.php index.html index.htm    
Options +FollowSymLinks    
RewriteEngine on    
RewriteCond %{QUERY_STRING} PHPSESSID=.*$    
RewriteRule (.*) http://www.mydomain.co.uk/$1? [R=301,L]    
RewriteCond %{HTTP_HOST} ^mydomain.co.uk$ [NC]    
RewriteRule ^(.*)$ http://www.mydomain.co.uk/$1 [R=301,L]    
RewriteCond %{THE_REQUEST} /index\.php\ HTTP/    
RewriteRule ^index\.php$ / [R=301,L]    
RewriteEngine on    
RewriteRule ^product/(.*).html$ product.php?p=$1 [L]    
RewriteRule ^(.*)\.html$ category.php?c=$1 [L,NC]        

Redirect 301 /oldpage.html http://www.mydomain.co.uk/newpage.html    

ErrorDocument 404 /404.php

Thanks for any help.

Upvotes: 2

Views: 2513

Answers (2)

Jon Lin
Jon Lin

Reputation: 143966

This is mod_alias (the Redirect directive) and mod_rewrite not playing nicely with each other. Because both modules apply their directives on the same URI in the URL-file mapping pipeline, they don't know to ignore each other since neither directive knows what the other module is doing. Since you're targets overlap, both modules are applying their directives on the same URI and you get a mish-mashed result.

You need to stick with mod_rewrite in this case and move the redirect above the internal rewrites:

DirectoryIndex index.php index.html index.htm    
Options +FollowSymLinks    
RewriteEngine on    

# redirects 
RewriteCond %{QUERY_STRING} PHPSESSID=.*$    
RewriteRule (.*) http://www.mydomain.co.uk/$1? [R=301,L]    

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

RewriteCond %{THE_REQUEST} /index\.php\ HTTP/    
RewriteRule ^index\.php$ / [R=301,L]    

RewriteRule ^oldpage.html$ http://www.mydomain.co.uk/newpage.html [R=301,L]

# internal rewrites
RewriteRule ^product/(.*).html$ product.php?p=$1 [L]    
RewriteRule ^(.*)\.html$ category.php?c=$1 [L,NC]        

ErrorDocument 404 /404.php

Upvotes: 1

riseagainst
riseagainst

Reputation: 430

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.net$ [OR]
RewriteCond %{HTTP_HOST} ^www\.abc\.net$
RewriteRule ^example\.html$ "http\:\/\/abc\.net\/example\/" [R=301,L]
RewriteOptions inherit

to a folder, or:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.net$ [OR]
RewriteCond %{HTTP_HOST} ^www\.abc\.net$
RewriteRule ^example\.html$ "http\:\/\/abc\.net\/example\.html$" [R=301,L]
RewriteOptions inherit

Don't know much about it, but it's what i use, hope it helps.

Upvotes: 0

Related Questions