Довольно URL без mod_rewrite, без .htaccess

Без возможности доступа .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?

Ответ 1

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

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

ErrorDocument 404 /index.php

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

Ответ 2

У вас также могут быть URL-адреса, например

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

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

echo $_SERVER['PATH_INFO'];

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

Ответ 3

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

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

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

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

www.example.com/index.php

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

Blog/2009/12/10/

Title_Of_This_Page

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

Ответ 4

Достаточно простой способ:

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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