.htaccess: как работают несколько файлов .htaccess? - PullRequest
2 голосов
/ 25 октября 2011

Это в контексте CakePHP, но я уверен, что это распространено в других приложениях. Я реализовал инструкции на этой странице:

http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess

A:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ app/webroot/ [L]
    RewriteRule (.*) app/webroot/$1 [L]
</IfModule>

B

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ webroot/ [L]
    RewriteRule (.*) webroot/$1 [L]
</IfModule>

C

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

В разделе 3 есть 3 файла .htaccess. Давайте просто назовем их A, B и C для простоты. Хотя он, кажется, работает на моем сервере (localhost XAMPP), я не уверен, что понимаю путь перенаправления. Какой бы адрес я ни набрал, он всегда идет по адресу localhost \ cake \ users \ login, как и положено.

Корневой каталог моего приложения с точки зрения того, где оно находится, - \ cake. У меня есть \ cake, \ cake \ app и cake \ app \ webroot с A, B и C соответственно. После выполнения приведенной выше инструкции запускаются коды в программе cake \ app, чего я и хочу. До правильной настройки файлов .htaccess, как описано выше, выполнялись коды в \ cake; это было неверно, так как сообщалось, что моя база данных не настроена, у вас нет этого файла и т. д.

Может кто-нибудь присоединиться и помочь мне с «путем», по которому это приложение берет до запуска любых php-файлов? Это перенаправить все на торт \ app \ webroot, затем на какой-либо редирект, установленный помимо файлов .htaccess оттуда? (в этом случае, чтобы торт \ пользователи \ логин)

Спасибо за помощь!

PS: мне стыдно сказать, что я до сих пор не выяснил, какая часть какого файла перенаправляется на все HTTP-запросы на страницу входа пользователя. Я настроил это некоторое время назад, и я просто вернулся к этому. Я думаю, что следовал второму учебнику на странице CakePHP Cookbook, где вы добавили функцию ACL.

Ответы [ 3 ]

2 голосов
/ 25 октября 2011

Может ли кто-нибудь присоединиться и помочь мне с «путем», по которому проходит это приложение перед запуском любых файлов php?Это перенаправить все на торт \ app \ webroot, затем на какой-либо редирект, установленный помимо файлов .htaccess оттуда?(в данном случае, на торт \ users \ login)

Короче говоря, да. Существует только один .htaccess файл, выполняющий работу real и это "C" (это файл в /app/webroot/.htaccess).Это передает любые запросы, которые не относятся к существующему файлу или каталогу, в index.php, который загружает CakePHP и обрабатывает запрос.Любое дальнейшее «перенаправление» обрабатывается маршрутизацией CakePHP .

Редактировать: Чтобы ответить на ваш вопрос о том, что перенаправляет на страницу входа, есть вероятность, что вы настроили Компонент Auth и не установил никаких «общедоступных» страниц с помощью $this->Auth->allow().


Два других есть, если вы поместите каталог установки CakePHP.или каталог приложения в папку, которая используется Apache для обслуживания страниц, например, /var/www/html или аналогичная.Вы заметите, что структура:

/ cakephp-1.3.x / .htaccess («A»)

/ cakephp-1.3.x/app/.htaccess ("B")

/ cakephp-1.3.x / app / webroot / .htaccess ("C")

Таким образом, любой запрос на любом из этих уровней будет обработан RewriteRule в "C".Это сделано для защиты конфиденциальных данных, таких как информация о подключении к вашей базе данных, и обеспечения правильного функционирования приложения (так как все запросы должны проходить через загрузчик CakePHP, если вы не настроили пользовательскую маршрутизацию).

1 голос
/ 25 октября 2011

Я думаю, что это происходит из-за использования компонента Auth в вашем приложении. Вы писали, что пытались использовать компонент Acl в cakephp, где используется компонент Auth. В случае включения компонента Auth в запрошенный контроллер, cakephpпо умолчанию перенаправляет на / users / login, если не указан другой метод loin.Так что я думаю, что htaccess не вызывает проблем здесь.

1 голос
/ 25 октября 2011

Следующая строка перенаправляет все на вашу индексную страницу, которая является конструкцией Cake.

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

В вашем случае я не думаю, что ваши перенаправления напрямую связаны с вашими файлами .htaccess. Ваш webroot htaccess просто передает все на вашу страницу индекса.

Однако вам следует рассмотреть возможность проверки страницы индекса. Контроллер для этой страницы, вероятно, имеет предложение по умолчанию для входящих аргументов. Таким образом, если вы введете URL с неизвестным параметром, на странице указателя просто отобразится экран входа в систему.

Это мои два цента. Тем не менее, я работал только с CakePHP в качестве эксперимента, поэтому кто-то с большим опытом может смело поправлять меня, если я ошибаюсь.

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