Создайте правило перезаписи мода Apache для обработки всех запросов в подкаталог - PullRequest
2 голосов
/ 16 января 2012

Я хочу перенаправить все входящие запросы в подкаталог, но не могу понять, как. Я посмотрел здесь , но у меня это не сработало.

Итак, если кто-то посещает www.example.com/test, я хочу, чтобы он перенаправил на: www.example.com/test/subdirectory, но URL все равно должен быть www.example.com/test

Мне также нужны параметры для работы, например, www.example.com/test/index.php?action=home необходимо перенаправить на www.example.com/test/subdirectory/index.php?action=home.

Надеюсь, кто-нибудь может мне помочь!

Ответы [ 2 ]

1 голос
/ 16 января 2012

Так что на самом деле то, что вы просите, не является перенаправлением.

Перенаправление означает, что веб-сервер отправит новый URL-адрес, содержащий подкаталог, браузер запросит этот новый URL-адрес и отобразит его в строке URL-адреса браузера.

Что вам нужно, так это прозрачно отобразить структуру каталогов в реальную структуру каталогов, которая отличается. Это то, что Apache может легко сделать с помощью инструкции Alias. Mod-rewrite также может сделать это, поскольку RewriteRules не содержит тега [R], это подразумевает внутреннюю перезапись, а не HTTP-ответ перенаправления. Тег [QSA] также будет указывать mod-rewrite хранить текущие параметры строки запроса в переписанном URL. Но Mod-rewrite не всегда прост для понимания, и ваша проблема достаточно проста для базового Alias, который почти всегда включен в Apache (чаще, чем mod-rewrite).

все должно быть в порядке:

Alias /test /test/subdirectory
1 голос
/ 16 января 2012

Попробуйте добавить следующее в файл .htaccess в корневом каталоге вашего сайта. Параметры строки запроса передаются по умолчанию.

RewriteEngine on
RewriteBase /

#if not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite to subdirectory
RewriteRule ^(.*)(/[^/]+)?$ /$1/subdirectory/$2 [L,QSA]
...