Как я могу скрыть имя папки из URL-адреса, используя .htaccess

У меня есть веб-сайт с корневой папкой «www», но я помещаю все файлы php, включая index.php, в подпапку root. Я написал себе файл .htaccess для перенаправления, поэтому, если я введу www.test.com, он перейдет к www.test.com/folder и отобразит index.php.

Ниже мой .htaccess который я положил в корень.

 RewriteEngine On
 RewriteBase /
 RewriteRule ^folder2 - [L] 
 #ignore folder2 in which I put important files, but no works for the website
 RewriteCond %{REQUEST_URI} !^/folder(.*)
 RewriteRule (.*) /folder/$1

Прямо сейчас я хочу изменить файл .htaccess для достижения этих целей:

  1. Когда я ввожу www.test.com, как обычно, перехожу к www.test.com/folder, но отображаю URL без папки.
  2. Все страницы в папке будут отображать URL без имени папки. Такие как

    www.test.com/shop/page1 -> www.test.com/page1

Я просмотрел несколько скриптов, но ни один из них не работает.


person user3404516    schedule 12.05.2015    source источник
comment
Проверьте это ... stackoverflow.com/questions/18361419 /   -  person NinjaCat    schedule 12.05.2015
comment
Как /shop/ связано с /folder/? Они такие же?   -  person anubhava    schedule 12.05.2015


Ответы (3)


Я нашел этот связанный вопрос, который отвечает на вашу проблему. Фрагмент ответа (примечание: он адаптирован к вашим потребностям):

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^folder/)^(.*)$ /folder/$1 [L,NC]

Ссылка: https://stackoverflow.com/a/18361995/3673491

person João Cerqueira    schedule 12.05.2015
comment
Я должен заменить этот файл своим .htaccess в корне, я прав? Сайты переходят только в папку, но URL-адрес по-прежнему будет «www.test.com/folder». - person user3404516; 12.05.2015
comment
Обратите внимание, что я только что обновил код ответом из предложения @NinjaCat, снова адаптированного к вашим потребностям. Проверьте это и скажите мне, правильно ли он работает сейчас. Я провел здесь простой локальный тест, и он сработал. Обратите внимание, что вам нужно изменить там, где вы видите folder, на фактическое имя, которое вы хотите дать этой папке. - person João Cerqueira; 12.05.2015

На основе ваших текущих правил. Вы можете просто сделать небольшую корректировку.

 RewriteEngine On
 RewriteBase /
 #ignore folder2 in which I put important files, but no works for the website
 RewriteRule ^folder2/? - [L] 

 RewriteRule ^/?$ /folder/ [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /folder/$1 [L]
person Panama Jack    schedule 12.05.2015
comment
Это не работает. На сайте больше даже не отображается страница index.php. - person user3404516; 12.05.2015
comment
Он все еще не прыгает. Положить этот файл в папку или просто оставить в корне? - person user3404516; 12.05.2015
comment
Что вы имеете в виду не прыгать? Я не понимаю, что вы имеете в виду. Что вы набираете в браузере и чего ждете? Начни там. - person Panama Jack; 12.05.2015

Вы можете использовать приведенный ниже код.

RewriteEngine On
RewriteBase /
RewriteRule ^/?$ /folder/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/$1 [L]
person Bhavik Koradiya    schedule 17.07.2017