#php #.htaccess #cakephp #redirect
#php #.htaccess #cakephp #перенаправление
Вопрос:
Это относится к 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, cakeapp и cakeappwebroot с A, B и C, соответственно, в них. После выполнения приведенной выше инструкции выполняются коды в cake app, чего я и хочу. До правильной настройки файлов .htaccess, как указано выше, выполнялись коды в cake; это было неверно, поскольку сообщало мне, что моя база данных не настроена, у вас нет этого файла и т. Д.
Может кто-нибудь вмешаться и помочь мне с «путем», который проходит это приложение перед запуском любых файлов php? Перенаправляет ли он все в cake app webroot, а затем на любое перенаправление, настроенное за пределами файлов .htaccess оттуда? (в данном случае в cakeusers login)
Спасибо за вашу помощь!
PS: Мне стыдно признаться, что я до сих пор не понял, какая часть какого файла перенаправляет весь HTTP-запрос на страницу входа пользователя. Я установил это некоторое время назад, и я только что вернулся к нему. Я думаю, что следовал второму руководству на странице CakePHP Cookbook, где вы добавляете функцию ACL..
Комментарии:
1. Простой метод отслеживания: добавьте дополнительный параметр запроса к URL-адресам для каждой повторной записи:
RewriteRule ...?url=$1amp;from=fileC
2. Марк, «…» должно быть чем-то другим?
3. да, это остальная часть вашего URL-адреса перезаписи. Просто ленив, не вырезая и не вставляя все это. Важным моментом является добавление параметра
amp;from=fileC
запроса.4. На самом деле, я думаю, что понимаю, что вы имеете в виду. Я попытался добавить эти параметры в каждое из правил перезаписи.. Однако я действительно не вижу ничего, что отображается при загрузке страницы.
5. Вы выполняете перенаправление при перезаписи, поэтому это только внутренняя перезапись… они ДОЛЖНЫ отображаться в журнале доступа к серверу.
Ответ №1:
Может кто-нибудь вмешаться и помочь мне с «путем», который проходит это приложение перед запуском любых файлов php? Перенаправляет ли он все в cake app webroot, а затем на любое перенаправление, настроенное за пределами файлов .htaccess оттуда? (в данном случае в cakeusers login)
Короче говоря, да.Существует только один .htaccess
файл, выполняющий реальную работу, и это «C» (который является файлом в /app/webroot/.htaccess
). Это передает любые запросы, которые не относятся к существующему файлу или каталогу, в index.php
который загружается CakePHP и обрабатывает запрос. Любое дальнейшее «перенаправление» обрабатывается маршрутизацией CakePHP.
Редактировать: чтобы ответить на ваш вопрос о том, что перенаправляет на страницу входа, скорее всего, вы настроили компонент авторизации и не установили никаких «общедоступных» страниц $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. Большое тебе спасибо, Джастин! Вы правы. Я нахожу компонент аутентификации в cakeappapp_controller.php и фильтр beforeFilter работает со страницей входа в систему. Я ценю четкое объяснение. Это имеет смысл.
Ответ №2:
Следующая строка перенаправляет все на вашу индексную страницу, которая представляет собой конструкцию Cake.
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
В вашем случае я не думаю, что ваши перенаправления напрямую вызваны вашими файлами .htaccess. Ваш webroot htaccess просто передает все на вашу индексную страницу.
Однако вам следует рассмотреть возможность проверки вашей индексной страницы. Контроллер для этой страницы, вероятно, имеет предложение по умолчанию для входящих аргументов. Таким образом, если вы введете URL-адрес с неизвестным параметром, ваша индексная страница просто покажет экран входа в систему.
Это мои два цента. Однако я работал с CakePHP только в качестве эксперимента, поэтому кто-то с большим опытом может смело поправить меня, если я ошибаюсь.
Комментарии:
1. Спасибо за ввод lunchmeat317. Когда у меня не было настройки htaccess, как указано выше, и я перешел на localhost / cake, он считывал файлы из каталога cake, где не было настроек файлов конфигурации. например, это выглядело как враг cakedatabase.php когда правильный находится в cakeappdatabase.php . Я вижу, что cakeappwebrootindex.php это файл, на который перенаправляется каждый запрос с текущими настройками A, B и C.
2. Хм, я рассмотрю это index.php запишите еще. Я не думаю, что я его модифицировал (используя его как есть при загрузке).
Ответ №3:
Я думаю, это происходит из-за использования компонента Auth в вашем приложении.Вы написали, что пытались использовать компонентную часть Acl cakephp, в которой используется компонент Auth.В случае включения компонента аутентификации в запрошенный контроллер, cakephp перенаправляет на /users/login по умолчанию, если не указан другой метод loin . Так что я думаю, что htaccess здесь не вызывает проблем.