Intereting Posts

Довольно 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 ухудшало производительность?

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

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

 ErrorDocument 404 /index.php 

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

Вы также можете использовать URL-адреса

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

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

 echo $_SERVER['PATH_INFO']; 

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

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

Вы можете приблизиться к тому, что хотите, просто добавив вопросительный знак после части домена 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

поэтому вы можете справиться с ними, как хотите.

Простой способ:

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

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

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

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

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

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

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