Красивые URL-адреса без mod_rewrite, без .htaccess - PullRequest
10 голосов
/ 10 июня 2009

Без возможности доступа к .htaccess я нахожусь в творческом тупике. Для меня нет mod_rewriting. Тем не менее, я хочу иметь возможность делать такие приятные вещи, как:

http://www.example.com/Blog/2009/12/10/
http://www.example.com/Title_Of_This_Page

Какие у меня есть альтернативы?

В ответ на ответы:

  • Я строю с php5
  • У меня нет доступа к .htaccess
  • http://www.example.com/index.php/Blog/ - известная техника, но я не предпочитаю ее. Это показывает php так сказать.
  • Как бы я создавал PHP-файлы без расширений? Будет ли это сделать трюк?
  • В какой степени использование пользовательской техники 404 повредит производительности?

Ответы [ 8 ]

11 голосов
/ 10 июня 2009

Если у вас есть права на установку пользовательских документов ошибок для вашего сервера, вы можете использовать это для перенаправления 404 запросов.

например. для Apache (http://httpd.apache.org/docs/2.0/mod/core.html#errordocument)

ErrorDocument 404 /index.php

В index.php вы можете продолжить запрос, используя данные из массива $ _SERVER.

7 голосов
/ 10 июня 2009

Вы также можете иметь URL-адреса, такие как

http://domain.com/index.php/Blog/Hello_World

из коробки с PHP5. Затем вы можете прочитать параметры URL, используя

echo $_SERVER['PATH_INFO'];

Не забудьте проверить / отфильтровать PATH_INFO и все другие переменные запроса перед использованием их в вашем приложении.

5 голосов
/ 15 января 2014

Я знаю, что этот вопрос очень старый, но я не видел, чтобы кто-нибудь еще предложил это возможное решение ...

Вы можете быть очень близки к тому, что вы хотите, просто добавив знак вопроса после доменной части URL, т.е.

http://www.example.com/?Blog/2009/12/10/
http://www.example.com/?Title_Of_This_Page

Оба вышеуказанных HTTP-запроса теперь будут обрабатываться одним и тем же сценарием PHP;

www.example.com/index.php

и в сценарии index.php, $_SERVER['REQUEST_URI'] для двух указанных выше страниц будет соответственно;

Blog/2009/12/10/

Title_Of_This_Page

чтобы вы могли обращаться с ними так, как хотите.

3 голосов
/ 30 июня 2009

Если вы пропустите завершающий слеш, Apache будет обслуживать первый файл [в алфавитном порядке], который соответствует этому имени, независимо от расширения, по крайней мере на 2 серверах, к которым у меня есть доступ.

Я не знаю, как вы могли бы использовать это для решения вашей проблемы, но это может быть полезно в какой-то момент.

Например, если http://www.somesite.com/abc.html и http://www.somesite.com/abc.php оба существуют, и запрашивается http://www.somesite.com/abc, http://www.somesite.com/abc.html будет обслуживаться.

3 голосов
/ 10 июня 2009

Довольно простой способ:

  • объявляет 404 ErrorDocument (например, PHP) в .htaccess
  • разобрать запрос с помощью $_SERVER и посмотреть, соответствует ли он какому-либо результату
  • если это так, замените HTTP-статус 404 на статус 200 с помощью header() и включите index.php
2 голосов
/ 10 июня 2009

Единственный способ - использовать пользовательскую страницу 404. У вас нет возможности интерпретировать файлы без расширений с помощью интерпретатора PHP без перенастройки MIME-типов веб-сервера. Но вы говорите, что не можете редактировать даже .htaccess, поэтому другого пути нет.

1 голос
/ 09 ноября 2009

Вы можете написать класс URI, который анализирует указанный пользователем удобный URL.

0 голосов
/ 10 июня 2009

Если опция MultiViews включена или вы можете убедить того, кто владеет ключами, включить ее, вы можете создать скрипт с именем Blog.php, который будет передавать запросы на example.com/Blog/foo и получать '/ foo' в $_SERVER['PATH_INFO'].

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