.htaccess - Mod_rewrite, first rule works perfectly, second rule does not -
i have 2 mod_rewrite rules, defining category , product. products displayed in categories, , clicking on product comes product page:
- this works:
http://www.example.com/ele/electricalgoods/ takes code value "ele" , uses rewrite call /view_category.php?cat=ele. works perfectly, using following mod_rewrite:
rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^([^/]*)/([^/]*)/([^/]*)$ /show_category.php?catcode=$1&page=$3 [nc] (this includes further "folder" pages in category view such http://www.example.com/ele/electricalgoods/3/)
- however, underneath in htaccess file want have similar rewrite so:
http://www.example.com/product/el063/earphones/ rewrites to: /view_product.php?prodid=el063
i did this htaccess code:
rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^product/([^/]*)/([^/]*)$ /show_product.php?prodid=$1 [nc,l] but somehow doesn't work expected, want product appear in "product/" folder "/product/<code>/<name>/" layout, , calling /show_product.php file.
what happens call view_product.php page fails 404 error.
i have tried rearrange mod_rewrite rules , have tried variations on escaping / ancasing in brackets product/ segment of url call. have tried changing $1 $2 or $3 incase ordering of codes has changed doesn't appear work.
what doing wrong?
for clarity, here full htaccess code:
options -indexes rewriteengine on rewritecond %{http_host} !^$ rewritecond %{http_host} !^www\. [nc] rewritecond %{https}s ^on(s)| rewriterule ^ http%1://www.%{http_host}%{request_uri} [r=301] rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^product/([^/]*)/([^/]*)$ /show_product.php?prodid=$1 [nc,l] rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^([^/]*)/([^/]*)/([^/]*)$ /view_category.php?catcode=$1&page=$3 [nc,l] edit: updated mod_rewrite code, issue persists l flags , reordering of rules
that's because match first rule ([^/]*)/([^/]*)/([^/]*). because pretty says in combination of 3 directories. need change order. , add l flag @ end stop processing once rule met.
options -indexes rewriteengine on rewritecond %{http_host} !^$ rewritecond %{http_host} !^www\. [nc] rewritecond %{https}s ^on(s)| rewriterule ^ http%1://www.%{http_host}%{request_uri} [r=301] rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^product/([^/]*)/([^/]*)/?$ /show_product.php?prodid=$1 [nc,l] rewritecond %{request_filename} !-d rewritecond %{request_filename} !-f rewriterule ^([^/]*)/([^/]*)/([^/]*)/?$ /view_category.php?catcode=$1&page=$3 [nc,l]
Comments
Post a Comment