[solved] Apache Rewrite Rules with RewriteBase not working

Discussion in 'Apache Migration/Compatibility' started by thehelpdesk, Jan 16, 2012.

  1. thehelpdesk

    thehelpdesk New Member

    We've migrated a client to LSWS 4.1.10 Ent from an Apache environment. The site worked perfectly in Apache but now the ReWrite rules aren't working correctly. Below are the rules in the problematic .htaccess file:

    RewriteEngine On
    RewriteBase /directory/

    RewriteCond %{REQUEST_URI} !index.php
    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?func=$1&urlA=$2&urlB=$3&urlC=$4 [L]
    RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?func=$1&urlA=$2&urlB=$3 [L]
    RewriteRule ^([^/]*)/([^/]*)$ index.php?func=$1&urlA=$2 [L]
    RewriteRule ^([^/]+)/(.*)$ index.php?func=$1 [QSA,L]

    The rewrite engine appears to be working but its not passing variables on to index.php as it should be. We can't seem to figure out how to get it to work in LSWS even though everything works perfectly in Apache.
  2. webizen

    webizen New Member

    try this
    %
  3. thehelpdesk

    thehelpdesk New Member

    That did not make any difference, same results. We cut-and-pasted the quoted code directly.
  4. webizen

    webizen New Member

    make sure 'RewriteBase /directory/' points to the actual directory in question.

    also, enable rewrite logging (add 'RewriteLogLevel 9' in httpd.conf) to further troubleshoot the rules (yours and mine).
    Last edited: Jan 17, 2012
  5. thehelpdesk

    thehelpdesk New Member

    The /directory/ folder does actually exist and is the base URL that's getting accessed. We've only changed the names here to protect the client's privacy. In the below log, /consultant/ represents /directory/ above.

    The results of RewriteLogLevel 9 are:

    Our Rules:
    2012-01-17 16:26:12.830 [INFO] [HTAccess] Updating configuration from [/home/domaincom/domains/domain.com/public_html/consultant/.htaccess]
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] strip base: '/consultant/' from URI: '/consultant/find-a-consultant/'
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)/([^/]*)/([^/]*)$', result: -1
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)/([^/]*)$', result: -1
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)$', result: 3
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] Source URI: 'find-a-consultant/' => Result URI: 'index.php?func=find-a-consultant&urlA='
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] replace current query string with 'func=find-a-consultant&urlA='
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] Last Rule, stop!
    2012-01-17 16:26:12.830 [INFO] [IPADDR:1586-0#APVH_www.domain.com] [REWRITE] prepend rewrite base: '/consultant/', final URI: '/consultant/index.php'

    Your Rules:
    2012-01-17 16:29:19.122 [INFO] [HTAccess] Updating configuration from [/home/domaincom/domains/domain.com/public_html/consultant/.htaccess]
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] strip base: '/consultant/' from URI: '/consultant/find-a-consultant/'
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)/([^/]*)/([^/]*)$', result: -1
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)/([^/]*)$', result: -1
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Rule: Match 'find-a-consultant/' with pattern '^([^/]*)/([^/]*)$', result: 3
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Cond: Match '/consultant/find-a-consultant/' with pattern 'index.php', result: -1
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Source URI: 'find-a-consultant/' => Result URI: 'index.php?func=find-a-consultant&urlA='
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] append query string 'func=find-a-consultant&urlA='
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] Last Rule, stop!
    2012-01-17 16:29:19.123 [INFO] [IPADDR:1617-0#APVH_www.domain.com] [REWRITE] prepend rewrite base: '/consultant/', final URI: '/consultant/index.php'
  6. webizen

    webizen New Member

    so what you want is that if nothing after last "/", do not show that (empty parameter) in query string.

    /directory/find-a-consultant/ ==> index.php?func=find-a-consultant instead of index.php?func=find-a-consultant&urlA=

  7. thehelpdesk

    thehelpdesk New Member

    Anything contained within the first / after the base directory should be passed to the first variable, which goes to func=. Then anything in the next set of slashes goes to urlA, next set to urlB, and next set to urlC. urlA, urlB, and urlB - or their corresponding variables - might be empty.

    Right now LSWS seems to only be passing the first variable and not the 2, 3, and 4 variables.
  8. webizen

    webizen New Member

    in our lab, test result is like

    /directory/abc/def/ghi ==> index.php?func=abc&urlA=def&urlB=ghi

    is that your desired result?

    pls show rewritelog.
  9. thehelpdesk

    thehelpdesk New Member

    Almost:

    /directory/abc/def/ghi/ ==> index.php?func=abc&urlA=def&urlB=ghi

    Note the last trailing slash after ghi. If it could work both ways that would be great, but, we're just trying to get it to work the one way to start as it does on Apache.
  10. webizen

    webizen New Member

    Yes, our lab test shows it works the same way with or without the trailing slash.

    /directory/abc/def/ghi(/)* ==> index.php?func=abc&urlA=def&urlB=ghi
  11. webizen

    webizen New Member

    Make sure you use the below rules which was published earlier.
    %

  12. thehelpdesk

    thehelpdesk New Member

    [solved]

    Solved and working now. Thank you.

Share This Page