Как запустить opencart из подкаталога после перенаправления из корня в подкаталог

Мне нужна помощь. У меня есть www.mysite.com в корневом каталоге. Я хочу запустить его из подпапки после перенаправления из корня в подпапку. Для перенаправления я добавил RewriteRule ^$ /abc [R=301,L] в htaccess root. Я хочу, например, если пользователь вводит www.mysite.com в браузере, он должен перенаправлять на www.mysite.com/subfolder, не требуя от пользователя ввода www.mysite.com /subfolder в браузере. Я использую OC 3.0.2.0. Я скопировал все файлы и папки из корня в подпапку и внес изменения в config.php, admin/config.php и htaccess в < strong>подпапка. Когда я ввожу www.mysite.com или mysite.com, он перенаправляет на mysite.com/subfolder, но выдает ошибку "Эта страница не работает". Когда я удаляю RewriteRule ^$ /abc [R=301,L] из htaccess root и ввожу www.mysite.com/subfolder, страница запускается. Но когда я вхожу в mysite.com/subfolder, он перенаправляется обратно на mysite.com и показывает страницу mysite.com. Нужно ли перенаправлять с не-www на www или с www на не-www. Как я могу добиться этих перенаправлений. Посоветуйте, пожалуйста, под какой строкой нужно поставить код для перенаправления в htaccess рута. На данный момент я ввел его в конце htaccess рута или после RewriteBase. Обратите внимание, что я хочу сохранить свой сайт как в корневом каталоге, так и во вложенной папке. Пожалуйста, объясните мне, как я могу запустить opencart из подкаталога после перенаправления из корня в подкаталог, сохранив его как в корне, так и в подкаталоге. Я был бы очень благодарен за вашу большую помощь. Спасибо

Ниже мой корневой 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

И моя подпапка htaccess выглядит следующим образом

# 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

person Arslan Khan    schedule 13.09.2019    source источник
comment
Вы пытались переименовать файл .htaccess подпапки в htaccess.txt в качестве теста? Это поможет вам определить, какой файл .htaccess вызывает проблему. Возможно, вы входите в петлю перенаправления   -  person Daniel    schedule 13.09.2019
comment
@Daniel Я переименовал файл .htaccess подпапки в htaccess.txt и удалил код перенаправления из корневого htaccess. После этого, когда я вхожу в mysite.com в браузере, он отображает страницу. Когда я захожу на www.mysite.com/Subfolder, он перенаправляется на mysite.com/Subfolder и отображается страница. Когда я вхожу на mysite.com/Subfolder, он перенаправляется на mysite.comsubfolder/ и отображается следующее. Этот сайт недоступен. IP-адрес сервера подпапки www.mysite.com не найден. Пожалуйста, помогите решить эту проблему и как я могу выйти из цикла перенаправления. Спасибо   -  person Arslan Khan    schedule 13.09.2019
comment
Видеть, что сайт работает, когда файлы .htaccess переименованы, означает, что код работает нормально, это просто ваши правила перенаправления/перезаписи вызывают проблемы. Это опечатка, когда вы включили подпапку в часть URL-адреса .com? например mysite.comsubfolder/ разве это не mysite.com/subfolder?   -  person Daniel    schedule 14.09.2019
comment
@ Даниэль Я думаю, ты прав, только правило перенаправления создает мне проблемы. Это не опечатка. Когда я вхожу на mysite.com/Subfolder, он перенаправляется на mysite.comsubfolder/ и отображается следующее. Этот сайт недоступен. IP-адрес сервера подпапки www.mysite.com не найден.   -  person Arslan Khan    schedule 15.09.2019
comment
Можете ли вы вставить содержимое .htaccess в подпапку? Кажется, что есть перенаправление, в котором отсутствует /   -  person Daniel    schedule 16.09.2019
comment
@ Даниэль, я очень благодарен за ваши усилия по решению моей проблемы. Я добавил два файла htaccess в вопрос. Пожалуйста, взгляните на это. Спасибо   -  person Arslan Khan    schedule 18.09.2019
comment
@Daniel, в свете вашего руководства, я обнаружил ошибку в htaccess root. Правило перезаписи ^(.*)$ example.com$1 [L,R=301,NC] должно выглядеть так: это правило перезаписи ^(.*)$ example.com/$1 [L,R=301,NC] . Но все же мне нужна ваша помощь для перенаправления из корня в подкаталог. Спасибо   -  person Arslan Khan    schedule 18.09.2019


Ответы (1)


Приведенный ниже скрипт .htaccess должен быть помещен в корень папки public_html. Это перенаправит на public_html\subfolder, а .htaccess там должен обрабатывать все остальное — я пытался сохранить другие правила в вашем примере htaccess, игнорируя содержимое OpenCart htaccess.

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

Само собой разумеется, что вам нужно отредактировать «example.com» и «subfolder» на свои собственные значения.

person Daniel    schedule 18.09.2019
comment
Извините, @Daniel, это не работает. Когда я ввожу example.com в адресную строку, он не перенаправляется на example.com/subfolder, а остается на example.com, и страница отображается с текстом. Запрошенная вами страница не может быть найдена. Однако я глубоко ценю ваши искренние усилия. - person Arslan Khan; 19.09.2019
comment
Ничего страшного, @ArslanKhan, нам нужно решить проблему. Я обновил скрипт для перенаправления 301, попробуйте это. - person Daniel; 19.09.2019
comment
Спасибо, брат @Daniel. Это работает как по волшебству. Я глубоко благодарен за вашу огромную помощь и искренние усилия. Посоветуйте мне еще одну вещь. Если я хочу внести изменения на свой веб-сайт, должен ли я внести изменения в public_html или внести изменения в содержимое подпапки, потому что на данный момент я все еще вижу содержимое public_html даже после перенаправления в подпапку. Спасибо - person Arslan Khan; 23.09.2019
comment
@ArslanKhan Добро пожаловать, я не уверен, что вы там видите, но, поскольку вы переместили сайт в подпапку, вы должны внести изменения там. Я бы предложил сделать дубликат текущего сайта в /subfolder2 и внести там изменения для тестирования. - person Daniel; 23.09.2019