.htaccess с общей папкой - PullRequest
       17

.htaccess с общей папкой

2 голосов
/ 03 июня 2010

У меня есть структура каталогов со следующим на localhost:

http://localhost/testing/

Внутри тестирования существует структура каталогов:

/testing/public
/testing/public/index.php
/testing/public/img
/testing/public/css
..etc for the js and swf directories

Файл .htaccess находится в папке тестирования, и его содержимое выглядит следующим образом:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /testing/

RewriteRule ^public$ public/ [R,QSA]
RewriteRule ^public/$ public/index.php?state=public [L,QSA]

RewriteRule ^stackoverflow$ stackoverflow/ [R,QSA]
RewriteRule ^stackoverflow/$ public/index.php?state=stackoverflow[L,QSA]

Я использую PHP и внутри файла /testing/public/index.php я хотел проверить, что $ _GET ['state'] действительно сохраняет переменную.

Когда я пытаюсь проверить:

http://localhost/testing/public

$ _ GET ['state'] вообще не найдено НО

http://localhost/testing/stackoverflow

действительно подтверждает, что $ _GET ['state'] равно 'stackoverflow'.

Что мне здесь не хватает ??? Почему я не могу получить состояние = public в первой ссылке? Спасибо за помощь!

1 Ответ

1 голос
/ 03 июня 2010

Это прекрасно работает в моей системе, но я думаю, что у вас возникли проблемы с правилом перезаписи с тем же именем, что и у действительного каталога файловой системы. Файловая система обычно имеет приоритет. Поэтому, когда вы загружаете «/ testing / public», он просто загружает /testing/public/index.php, не выполняя ваше правило вообще.

Попробуйте изменить правило так:

RewriteRule ^public_$ public_/ [R,QSA]
RewriteRule ^public_/$ public/index.php?state=public [L,QSA]

Перейдите к пункту «testing / public_», если он печатает «public», как ожидалось, тогда вы будете знать, что это была ваша проблема.

...