Welcome to WebmasterWorld Guest from 54.227.5.198

Forum Moderators: Ocean10000 & incrediBILL & phranque

Message Too Old, No Replies

Mod Rewrite - need to change variable value from 180 to 680

How do I add 500 to a variable?

     

nigelt74

9:44 am on Aug 2, 2007 (gmt 0)

10+ Year Member



Ok the situation is this

Short version
I need to to add 500 to a variable I am using in my redirect eg if the variable is 150 it needs to be converted to 650

Long Version

I have replaced a shopping cart with a new one and obviously the links don't match up , BUT the real problem is that the variables don't match up any more
The old cart produced 2 different urls

one for first level categories (I have got this redirect working)

Old Store
[site.co.nz...]
New Store (800 is added to the category variable)
[site.co.nz...]

with this rule
RewriteCond %{QUERY_STRING} ^page_ID=1&cat_ID=([^/\.]+)?$
RewriteRule ^index\.php$ /sbo_shop/index\.php\?main_page=index&cPath=8%1 [R=301,L]
and it works fine

BUT

for the other URL for the next level of navigation
there are 3 variables involved
cat_ID easy to deal with just need to prefix it with an 8
pg_ID doesn't need changing it is fine
sub_ID -- I need to add 500 to the variable and this is what i can't figure out
eg
Old Store
[site.co.nz...]
New Store
[site.co.nz...]

jdMorgan

4:53 pm on Aug 2, 2007 (gmt 0)

WebmasterWorld Senior Member jdmorgan is a WebmasterWorld Top Contributor of All Time 10+ Year Member



mod_rewrite isn't a scripting language, so it's not going to be of much help. I'd suggest you modify your script, or add an intermediary script, and just use mod_rewrite to pass information to the script that tells it to convert the old URL to the new style and then run the shopping cart script as usual.

Jim

nigelt74

11:05 pm on Aug 2, 2007 (gmt 0)

10+ Year Member



Oh dear i had a horrible feeling that was going to be the case

It took me 2 days to figure out the first redirect so I think I'll just dump the sub and pg variable and make the redirect take the page to the first level category

But if you could provide me with a link to a tutorial that tells me how to pass a variable to an external script I'll definitly have a look at it

The other thing is and i'm not sure if i should start a new thread for this is this bit


cat_ID=([^/\.]+)?$

in my current redirect is it too "greedy" on resources as the cat_ID is always a 2 digit number, but when i tried doing ([0..9]) it didn't work

Thanks for the help JDMorgan

theBear

12:56 am on Aug 3, 2007 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



If you have control of the server you can do the rewrite as a PERL script that runs as a rewrite map.

It isn't difficult you just have to be careful.

jdMorgan

2:17 am on Aug 3, 2007 (gmt 0)

WebmasterWorld Senior Member jdmorgan is a WebmasterWorld Top Contributor of All Time 10+ Year Member



After some pondering, I figured this out. Here is a very slow and ugly way to solve the problem -- if my assumptions are correct:
  • I assume that the name/value pairs in the old URLs are always in the same order.
  • I assume that the old sub_ID is always a three-digit number starting with 0 through 9, although I made provisions in case you didn't use leading zeros for sub_ID= 0 through 99.
  • I assume that the old sub_ID ranges from 000 through 999 inclusive, and no higher.
  • I assume that this server isn't going to be getting more than 100 hits per second... :)
    If those assumptions are correct, then code like this should work. This code does not "add 500," but rather substitutes 500 for 000, 613 for 113, 874 for 374, etc.

    RewriteCond %{QUERY_STRING} ^page_ID=1&cat_ID=([0-9]+)$
    RewriteRule ^index\.php$ http://example.com/shop/index\.php\?main_page=index&cPath=8%1 [R=301,L]
    #
    RewriteCond %{QUERY_STRING}>50 ^cat_ID=([0-9]+)&sub_ID=([0-9])&pg_ID=([0-9]+)&page_ID=2>(50)$ [OR]
    RewriteCond %{QUERY_STRING}>5 ^cat_ID=([0-9]+)&sub_ID=0?([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(5)$ [OR]
    RewriteCond %{QUERY_STRING}>6 ^cat_ID=([0-9]+)&sub_ID=1([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(6)$ [OR]
    RewriteCond %{QUERY_STRING}>7 ^cat_ID=([0-9]+)&sub_ID=2([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(7)$ [OR]
    RewriteCond %{QUERY_STRING}>8 ^cat_ID=([0-9]+)&sub_ID=3([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(8)$ [OR]
    RewriteCond %{QUERY_STRING}>9 ^cat_ID=([0-9]+)&sub_ID=4([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(9)$ [OR]
    RewriteCond %{QUERY_STRING}>10 ^cat_ID=([0-9]+)&sub_ID=5([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(10)$ [OR]
    RewriteCond %{QUERY_STRING}>11 ^cat_ID=([0-9]+)&sub_ID=6([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(11)$ [OR]
    RewriteCond %{QUERY_STRING}>12 ^cat_ID=([0-9]+)&sub_ID=7([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(12)$ [OR]
    RewriteCond %{QUERY_STRING}>13 ^cat_ID=([0-9]+)&sub_ID=8([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(13)$ [OR]
    RewriteCond %{QUERY_STRING}>14 ^cat_ID=([0-9]+)&sub_ID=9([0-9]{2})&pg_ID=([0-9]+)&page_ID=2>(14)$
    RewriteRule ^index\.php$ http://example.com/shop/index.php?main_page=index&cPath=8%1_%4%2_%3 [R=301,L]

    The ">" character is meaningless; It only serves as a delimiter to keep my new pseudo-variable separate from your existing query string in the pattern.

    If this doesn't meet your needs, then using a script to re-arrange the query and then call your new shopping cart, or using a RewriteMap script as theBear suggests, will be your best bet.

    Jim

  • nigelt74

    5:54 am on Aug 10, 2007 (gmt 0)

    10+ Year Member



    Thank you Jim that works perfectly

    It took me a while to figure out exactly how it works, but when i did damn thats clever, I never would have thought to look at it from that angle,

    hopefully this will save my bacon, i've had 4000ish 404 since i switched the site over

    Thanks
    Nigel

    jdMorgan

    3:50 pm on Aug 10, 2007 (gmt 0)

    WebmasterWorld Senior Member jdmorgan is a WebmasterWorld Top Contributor of All Time 10+ Year Member



    Yeah, I call that the "RewriteCond lookup table" method. I'm not sure where I got it, but it's not my original invention.

    Jim

     

    Featured Threads

    Hot Threads This Week

    Hot Threads This Month