jsuissa
jsuissa

Reputation: 1762

Issue changing a word in a URL using mod_rewrite

I'm trying to change the word "portfolio" in my URLs to "portfolio/project" and inadvertently created a redirect loop. Would appreciate any help in pointing me in the right direction.

Example:

http://www.example.com/portfolio/interactive/abc/ to

http://www.example.com/portfolio/project/interactive/abc/

Current htaccess (last two lines relates to issue):

redirect 301 "/sitemap.xml" http://www.example.com/sitemap.php

RewriteEngine On
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/sitemap.php
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{REQUEST_URI} /.*portfolio.*$ [NC]
RewriteRule ^(.*)portfolio(.*)$ /$1portfolio/project$2 [R=301,L]

Upvotes: 1

Views: 126

Answers (1)

Jon Lin
Jon Lin

Reputation: 143906

Your problem is that your regex also matches your target, so after the redirect, the URI matches the same rule and gets redirected again (you may have noticed that there's a bunch of /project/project/project/project/project/project/project in the URI)

Add an exclusion condition:

RewriteCond %{REQUEST_URI} !portfolio/project
RewriteCond %{REQUEST_URI} /.*portfolio.*$ [NC]
RewriteRule ^(.*)portfolio(.*)$ /$1portfolio/project$2 [R=301,L]

Upvotes: 1

Related Questions