Как URL, подобный http://localhost/index.php/articles/edit/1/my-first-article, может работать без .htaccess?

StackOverflow https://stackoverflow.com/questions/966916

Вопрос

Я этого не понимаю:

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 для анализа запроса, а затем добавляли нужную страницу с этой информацией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top