Довольно 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']
.