If the customer comes to:
http://site.com/catalog/product.php?itemNo=1
Then I want to rewrite it (with a 301 redirect so it's visible to the customer and search engines) to
http://site.com/catalog/product/1/
AND... then.... if the user comes to
http://site.com/catalog/product/1/
then invisibly

http://site.com/catalog/product.php?itemNo=1
And have it go on through.
I have this done as I think it should work, but it's failing on the 2nd part, the internal rewrite back to the .php script.
Here's my rules:
- Code: Select all
# rewrite old style to new style, make rewrite visible
# note '?' at end of rule, to dump the arguments from the end of the url
RewriteCond %{QUERY_STRING} itemNo=([A-Za-z0-9]+)
RewriteRule ^catalog/product.php /catalog/product/%1/? [R=301,L]
# now rewrite new style to old style, internally (do not show user)
RewriteRule ^catalog/product/([A-Za-z0-9]+)$ /catalog/product.php?itemNo=$1 [L]
RewriteRule ^catalog/product/([A-Za-z0-9]+)/$ /catalog/product.php?itemNo=$1 [L]
Here's the output from my log if that helps:
/initial] (3) [per-dir /usr/local/apache2/htdocs/] add path info postfix: /usr/local/apache2/htdocs/catalog/product -> /usr/local/apache2/htdocs/catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] strip per-dir prefix: /usr/local/apache2/htdocs/catalog/product/108/ -> catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] applying pattern '^catalog/product.php' to uri 'catalog/product/108/'
/initial] (3) [per-dir /usr/local/apache2/htdocs/] add path info postfix: /usr/local/apache2/htdocs/catalog/product -> /usr/local/apache2/htdocs/catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] strip per-dir prefix: /usr/local/apache2/htdocs/catalog/product/108/ -> catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] applying pattern '^catalog/product/([A-Za-z0-9]+)$' to uri 'catalog/product/108/'
/initial] (3) [per-dir /usr/local/apache2/htdocs/] add path info postfix: /usr/local/apache2/htdocs/catalog/product -> /usr/local/apache2/htdocs/catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] strip per-dir prefix: /usr/local/apache2/htdocs/catalog/product/108/ -> catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] applying pattern '^catalog/product/([A-Za-z0-9]+)/$' to uri 'catalog/product/108/'
/initial] (2) [per-dir /usr/local/apache2/htdocs/] rewrite catalog/product/108/ -> /catalog/product.php?itemNo=108
/initial] (3) split uri=/catalog/product.php?itemNo=108 -> uri=/catalog/product.php, args=itemNo=108
/initial] (1) [per-dir /usr/local/apache2/htdocs/] internal redirect with /catalog/product.php [INTERNAL REDIRECT]
/initial/redir#1] (3) [per-dir /usr/local/apache2/htdocs/] strip per-dir prefix: /usr/local/apache2/htdocs/catalog/product.php -> catalog/product.php
/initial/redir#1] (3) [per-dir /usr/local/apache2/htdocs/] applying pattern '^catalog/product.php' to uri 'catalog/product.php'
/initial/redir#1] (2) [per-dir /usr/local/apache2/htdocs/] rewrite catalog/product.php -> /catalog/product/108/?
/initial/redir#1] (3) split uri=/catalog/product/108/? -> uri=/catalog/product/108/, args=<none>
/initial/redir#1] (2) [per-dir /usr/local/apache2/htdocs/] explicitly forcing redirect with http://site.com/catalog/product/108/
/initial/redir#1] (1) [per-dir /usr/local/apache2/htdocs/] escaping http://site.com/catalog/product/108/ for redirect
/initial/redir#1] (1) [per-dir /usr/local/apache2/htdocs/] redirect to http://site.com/catalog/product/108/ [REDIRECT/301]
/initial] (3) [per-dir /usr/local/apache2/htdocs/] add path info postfix: /usr/local/apache2/htdocs/catalog/product -> /usr/local/apache2/htdocs/catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] strip per-dir prefix: /usr/local/apache2/htdocs/catalog/product/108/ -> catalog/product/108/
/initial] (3) [per-dir /usr/local/apache2/htdocs/] applying pattern '^catalog/product.php' to uri 'catalog/product/108/'
(etc. you can see that it's repeating...)
What the heck am I doing wrong?!!

Thanks for any help-
best
Eric