Получить переменные отображаются в подпапке переписывает, .htaccess, mod_rewrite - PullRequest
1 голос
/ 30 сентября 2011

Вот мой .htaccess:

Options +FollowSymLinks  
Options +Indexes  
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} -d  
RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI}  

htaccess живет в test.com/main/.htaccess
Я могу получить доступ к test.com/main/ и test.com/index.php в порядке
test.com/main/directory переписывается на test.com/main/index.php?dir=/main/directory/ НО test.com/main/directory остается в строке URL. Это хорошо.

Проблема в том, что я пытаюсь получить доступ к подкаталогам. Когда я захожу на test.com/main/foler1/folder2, он переписывается в index.php? Dir = / main / folder1 / folder2 /. Это также хорошо, однако test.com/main/folder1/folder2/?dir=/main/folder1/folder2/ отображается в адресной строке вместо того, чтобы держать test.com/main/folder1/folder2 в строке URL-адреса. Это проблема.

Я хочу, чтобы все подкаталоги, а не только прямые дочерние элементы main, сохраняли каталог в строке URL при переписывании. Прямые дети делают это хорошо, но любые каталоги под этим переписывают так, чтобы мои переменные get отображались.

Цель этого переписывания заключается в том, что мне не нужно копировать файл index.php в каждую вновь создаваемую папку, поэтому копирование .htaccess в каждую папку отрицательно сказывается на цели.

Ответы [ 2 ]

0 голосов
/ 08 октября 2011

Я добавлю решение, которое нашел при тестировании решения mootinator.

Вместо ссылки на
test.com/main/foler1/folder2

ссылка на
test.com / main / foler1 / folder2 / (включая косую черту!)

Перенаправление будет успешно перенаправлено на
index.php? dir = / main / folder1 / folder2 /

while
test.com/main/foler1/folder2/
остается в строке URL.

Это несколько хакерское решение, но оно должно работать просто отлично.

0 голосов
/ 06 октября 2011

Возможно, вы захотите RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI} [QSA,L] (буква L запрещает перезаписи мода обрабатывать любые дальнейшие правила, если правило успешно выполнено) QSA добавляет любую строку запроса, которая могла быть передана.

Обновление:

Проблема заключается в том, что сервер переписывает URL-адрес без косой черты (видимо) в качестве URL-адреса с косой чертой, а также включает в себя правило перезаписи. Обходной путь - обработать правило, только когда URL заканчивается косой чертой, например:

RewriteRule ([^/]+/.*/$) index.php?dir=%{REQUEST_URI} [QSA,L]

Таким образом, он будет выполнять перезапись в два отдельных шага:

  1. Добавьте косую черту.
  2. Перепишите, используя ваше правило для index.php

Вместо:

  1. Добавьте косую черту и заметно переписайте в index.php.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...