Search code examples
.htaccesshttp-redirectopencartrootsubdirectory

How to run opencart from subdirectory after redirect from root to subdirectory


I need some help. I have www.mysite.com in root directory. I want to run it from subfolder after redirecting from root to subfolder. For redirection, I have added RewriteRule ^$ /abc [R=301,L] in htaccess of root. I want, For example, if user enters www.mysite.com in the browser,it should redirect to www.mysite.com/subfolder without requring the user to enter www.mysite.com/subfolder in the browser. I am using OC 3.0.2.0. I have copied all files and folders from root to subfolder and have made changes in config.php, admin/config.php and htaccess of subfolder. When I enter www.mysite.com or mysite.com it redirects to mysite.com/subfolder, but gives an error "This page is not working". When I remove RewriteRule ^$ /abc [R=301,L] from htaccess of root and enter www.mysite.com/subfolder, then the page runs. But when I enter mysite.com/subfolder, then it redirects back to mysite.com and showing page of mysite.com. Do I need to redirect from non-www to www or from www to non-www as well. How can I achieve these redirections. Please advise me under which line I need to put code for redirection in htaccess of root. At the moment, I have entered it at the end of htaccess of root or after RewriteBase. Please note that I want to keep my site both in root and in subfolder. Please guide me how I can run opencart from subdirectory after redirect from root to subdirectory after keeping it both in root and subdirectory. I would be greately thankful for your great help. Thanks

Following is my root htaccess.

RewriteOptions inherit

  # 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 "(?i)((\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt))">
  Require all denied
  ## For apache 2.2 and older, replace "Require all denied" with these two 
  lines :
  # 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=extension/feed/google_sitemap [L]
        RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
        RewriteRule ^system/storage/(.*) index.php?route=error/not_found [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

        # 7. disable open_basedir limitations
        # php_admin_value open_basedir none
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^example.com [NC]
        RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301,NC]

        # php -- BEGIN cPanel-generated handler, do not edit
        # Set the “ea-php56” package as the default “PHP” programming language.
        <IfModule mime_module>
          AddHandler application/x-httpd-ea-php56 .php .php5 .phtml
        </IfModule>
        # php -- END cPanel-generated handler, do not edit

And my subfolder htaccess is as following

# 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 "(?i)((\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt))">
 Require all denied
## For apache 2.2 and older, replace "Require all denied" with these two lines :
# 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 /Subfolder/
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [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

# 7. disable open_basedir limitations
# php_admin_value open_basedir none

Solution

  • The below .htaccess script should be placed in the root of the public_html folder. This will redirect to the public_html\subfolder and the .htaccess there should handle the rest - I've tried to preserve the other rules in your example htaccess while ignoring the OpenCart htaccess contents.

    Options +FollowSymlinks
    
    # Prevent Directoy listing
    Options -Indexes
    
    # Prevent Direct Access to files
    <FilesMatch "(?i)((\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt))">
    Require all denied
    ## For apache 2.2 and older, replace "Require all denied" with these two 
    lines :
    # Order deny,allow
    # Deny from all
    </FilesMatch>
    
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} !^/subfolder
    RewriteRule (.*) subfolder/$1 [R=301,L]
    
    # php -- BEGIN cPanel-generated handler, do not edit
    # Set the “ea-php56” package as the default “PHP” programming language.
    <IfModule mime_module>
      AddHandler application/x-httpd-ea-php56 .php .php5 .phtml
    </IfModule>
    # php -- END cPanel-generated handler, do not edit
    

    It goes without saying that you need to edit "example.com" and "subfolder" to your own values