Как URL, подобный http://localhost/index.php/articles/edit/1/my-first-article, может работать без .htaccess?
Вопрос
Я этого не понимаю:
http://localhost/index.php/articles/edit/1/my-first-article
Этот URL-адрес упоминается в качестве примера в Рамочная документация Kohana.Я покопался в файлах моей установки, и там нет .htaccess, кроме моего собственного, который не имеет к этому никакого отношения.
Итак, как может быть, что вызывается index.php, но затем, в качестве параметров, материал выглядит как добавленные каталоги к URL?Это не выглядит "настоящим".
Или это просто то, как на самом деле работает нативный материал PHP / Apache / HTTP?Насколько я понимаю, / всегда говорит "эй, каталог!".Для меня это действительно не имеет никакого смысла...как это возможно?Или у них где-то есть .htaccess, который я просто не могу увидеть / найти?
Решение
В PHP вы можете получить данные после имени файла с помощью $_SERVER["PATH_INFO"]
переменная.Это позволяет вам получать информацию GET без необходимости использования переменных GET, а это означает, что Google и другие будут думать, что вы используете статические страницы.По сути, это альтернатива mod_rewrite
который часто включается, пока mod_rewrite
чаще всего не включен.
Это может быть очевидно для вас, но для меня это было не сразу: это не работает правильно на индексных страницах, если вы не используете имя файла.Например, http://example.com/test/my/get/params
не будет работать, пока http://example.com/test/index.php/my/get/params
воля.
Другие советы
Из самого Документы Apache:
Директива AcceptPathInfo
Эта директива определяет, будут приниматься или отклоняться запросы, содержащие конечную информацию об имени пути, которая следует за фактическим именем файла (или несуществующим файлом в существующем каталоге).Завершающая информация имя пути может быть сделано доступным для сценариев в переменной среды PATH_INFO .
Например, предположим, что местоположение /test/ указывает на каталог, который содержит только один файл here.html.Затем запросы на /test/here.html/more и /test/nothere.html/more собираются вместе /more как PATH_INFO.
Поэтому я предполагаю, что этот параметр включен где-то, например, в httpd.conf.Обратите внимание, что это, как и mod_rewrite, может быть включено / настроено в нескольких местах - смотрите здесь.
AcceptPathInfo включен для вашего сервера.:)
Я не использую Kohana, поэтому не знаю, будет ли мой метод полезен, но когда сервер не поддерживает файлы .htaccess (или правила перезаписи), моя «фреймворк» генерирует такие URI:
http://www.domain.com/?/articles/edit/1/my-first-article (обратите внимание?)
Это аналогичный метод, используемый в среде Frog, просто проанализируйте $_SERVER['REQUEST_URI']
(или $_SERVER['HTTP-X-REWRITE-URL']
на серверах Windows) и разбить на '/'.
Этот метод полностью независим от перезаписи и по-прежнему генерирует более или менее оптимизированные для SEO URI.
Надеюсь, это вам пригодится.
Вероятно, здесь не тот случай, и, конечно, не рекомендуется, и, вероятно, это не правильный ответ...
НО ...
Я видел, как люди использовали страницы 404 для анализа запроса, а затем добавляли нужную страницу с этой информацией.
См. PATH_INFO в Переменные среды CGI.