SitePoint Sponsor

User Tag List

Results 1 to 4 of 4
  1. #1
    SitePoint Member
    Join Date
    Aug 2012
    Posts
    2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Redirect - conficting rules

    Hello!

    I moved my opencart script from subfolder store/ to site root. In index of search engines there are links which point to old locations, for example:

    mysite.tld/store/page24?limit=25
    mysite.tld/store/page503

    Some of those pages with parameters, some are not. I need them to be redirected like this:
    mysite.tld/store/page24?limit=25 >>> mysite.tld/page24?limit=25
    mysite.tld/store/page503 >>> mysite.tld/page503

    I'm setting up .htaccess rules and to the moment ended with following directive:
    Code:
    RedirectMatch 301 ^/store/(.*)$ http://mysite.tld/$1
    But it doesn't work because of this directive:
    Code:
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    ...or in such variant:
    Code:
    RewriteRule ^(.*) index.php?_route_=$1 [L,QSA]
    I would remove last mentioned directive, but it is responsible for seo urls in opencart.

    Please help me to write proper directives, preferably using rewriterule, rewritecond (not RedirectMatch). I've read some manuals, like http://datakoncepts.com/SEO but all i've tried don't work:
    Code:
    RewriteCond %{HTTP_HOST} ^mysite\.tld/store/$ [NC]
    RewriteRule .? http://mysite.tld/$1 [R=301,L]
    Code:
    RewriteMap noname txt:/domens/mysite.tld/1.txt
    Code:
    RewriteCond %{HTTP_HOST} ^mysite\.tld/store
    RewriteRule ^(.*)$ http://mysite.tld/$1 [R=301,L]
    Code:
    RewriteRule ^mysite\.tld/store/(.*)$ http://mysite.tld/$1 [R=301,L]


    My current .htaccess:
    Code:
    # 1.To use URL Alias you need to be running apache with mod_rewrite enabled. 
    
    # 2. In your opencart directory rename htaccess.txt to .htaccess.
    
    # For any support issues please visit: http://www.opencart.com
    
    Options +FollowSymlinks
    
    # Prevent Directoy listing 
    Options -Indexes
    
    # Prevent Direct Access to files
    <FilesMatch "\.(tpl|ini|log)">
     Order deny,allow
     Deny from all
    </FilesMatch>
    
    # SEO URL Settings
    RewriteEngine On
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ 
    
    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    
    # disabled in ocstore 1.5.3.1:
    #RewriteRule ^yandexmarket.xml$ index.php?route=feed/yandex_market [L]
    
    # to www 301 redirect (in case it will be needed)
    # RewriteCond %{HTTP_HOST} !^www\.
    # RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    
    # to non-www 301 redirect 
    RewriteCond %{HTTP_HOST} ^www\.
    RewriteRule ^(.*)$ http://mysite.tld/$1 [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^(.*) index.php?_route_=$1 [L,QSA]
    
    ### Additional Settings that may need to be enabled for some servers 
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
    
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    # php_flag register_globals off
    
    # 2. If your cart has magic quotes enabled, This may work to disable it:
    # php_flag magic_quotes_gpc Off
    
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200
    
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    
    
    
    
    # partially working redirect
    #RedirectMatch 301 ^/store/(.*)$ http://mysite.tld/$1

  2. #2
    Certified Ethical Hacker silver trophybronze trophy dklynn's Avatar
    Join Date
    Feb 2002
    Location
    Auckland
    Posts
    14,650
    Mentioned
    19 Post(s)
    Tagged
    3 Thread(s)
    areol,

    Hmmm, this should be a simple redirection.

    First, mod_alias, as part of Apache's core, preempts mod_rewrite as it's processed first. Once a redirection is made by mod_alias, mod_rewrite can come along and make its own redirection.

    Second, your RewriteRule can work but it will ALWAYS match (because you're requiring only the start anchor and ? will NEVER be found in a {REQUEST_URI} string - it delineates the end of the {REQUEST_URI} string and the start of the {QUERY_STRING}. Therefore, it's just as "good" (IMHO, as TERRIBLE - and LOOPY) as (.*). Therefore, my first Standard Rant:

    [standard rant #1]
    The use of "lazy regex," specifically the EVERYTHING atom, (.*), and its close relatives, is the NUMBER ONE coding error of newbies BECAUSE it is "greedy." Unless you provide an "exit" from your redirection, you will ALWAYS end up in a loop!
    [/standard rant #1]

    You might benefit from reading the mod_rewrite tutorial linked in my signature as it contains explanations and sample code. It's helped may members and should help you, tYou might benefit from reading the mod_rewrite tutorial linked in my signature as it contains explanations and sample code. It's helped may members and should help you, too.

    Regards,

    DK
    David K. Lynn - Data Koncepts is a long-time WebHostingBuzz (US/UK)
    Client and (unpaid) WHB Ambassador
    mod_rewrite Tutorial Article (setup, config, test & write
    mod_rewrite regex w/sample code) and Code Generator

  3. #3
    SitePoint Member
    Join Date
    Aug 2012
    Posts
    2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I've read your tutorial, regex to capture store/ is:
    Code:
    ([a-zA-Z]+)/
    Though it is not needed.

    Regex to capture everything after store/ is not easy for me. It should include numbers and special characters like ? = _ - &
    My best bet is :
    Code:
    store/([a-zA-Z0-9_-?=&]+)
    So, everything should look something like:
    Code:
    RewriteCond %{HTTP_HOST} ^mysite\.tld/store/$ [NC]
    RewriteRule ^/store/([a-zA-Z0-9_-?=&]+)$ http://mysite.tld/$1 [R=301,L]
    It's not working, and this is best what i can think of right now (

  4. #4
    Certified Ethical Hacker silver trophybronze trophy dklynn's Avatar
    Join Date
    Feb 2002
    Location
    Auckland
    Posts
    14,650
    Mentioned
    19 Post(s)
    Tagged
    3 Thread(s)
    areol,

    You need to review a few things:

    1. The placement of the hyphen in a range definition makes it a metacharacter - e.g., to define a-d (a, b, c and d). To specify a hyphen character, it must be first (although last seems to be acceptable, too).

    2. The characters allowed with a URI are enumerated in a paper by Sir Tim Berners-Lee entitled Uniform Resource Identifiers (URI): Generic Syntax and you are attempting to use reserved characters. Clearly, if you violate the long-established rules for URIs, you will fail - as you have already proved.

    Do you need the list of characters I use at http://wilderness-wally.com?

    Regards,

    DK
    David K. Lynn - Data Koncepts is a long-time WebHostingBuzz (US/UK)
    Client and (unpaid) WHB Ambassador
    mod_rewrite Tutorial Article (setup, config, test & write
    mod_rewrite regex w/sample code) and Code Generator


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •