Довольно URL и SEO-дружественный URL? - PullRequest
0 голосов
/ 24 августа 2011

Я сейчас использую Apache 2.2

Я могу делать простые вещи, как

RewriteRule ^/news$ /page/news.php [L]
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L]

но что, если я хочу отправить 2 параметра, как это

http://www.example.com/link/param1/param1_value/param2/param2_value

Наконец, я также хочу знать, как реализовать оптимизированный для SEO URL, такой как stackoverflow

хотя я могу получить доступ к странице с URL-адресом вроде

http://www.example.com/doc_no/

Просто украшаем этот URL с помощью

http://www.example.com/doc_no/this-is-the-article

Дайте мне предложение с примерами фрагментов.

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Я знаю, что среда PHP Symfony позволяет вам это делать.

Как это работает: В конфигурации apache используйте mod_rewrite, чтобы перенаправить ВСЕ входящие запросы в одну точку входа (в Symfony это называется"front controller")

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

В этом front controller вы собираетесь создать объект "Request", который содержит всю информацию, предоставленную URL.

Например, вы можете сказать, чтопервая вещь после "/" - это имя файла PHP для вызова, а все остальное - это параметры и значения, так что http://example.com/file/id/2 вызовет file.php с id = 2

.что, просто используйте некоторый reg exp и тщательно спроектируйте свой класс «Request».Для приведенного выше примера класс «Запрос» должен предоставлять методы getRequestedAction () и getParameter (строковый параметр).Метод getRequestedAction () будет использоваться, когда объект «Запрос» заполнен полностью, чтобы вызвать правильный файл / действие / метод.

, если вы решите заполнить массив параметров объекта запроса обоимиexp на URL и разбор массива _GET, вы можете добраться до точки, где: http://example.com/file/id/2 совпадает с http://example.com/file?id=2 (и оба могут работать)

вы можетевыберите игнорирование расширений (http://example.com/file.html совпадает с http://example.com/file), или нет.

Наконец, для некоторых URL вы можете просто игнорировать все, что идет после последнего символа '/'.что: http://example.com/question/3/where-is-khadafi совпадает с http://example.com/question/3/is-linux-better-than-windows

В другом файле file.php просто используйте $ request-> getParameter ('id'), чтобы получить значение параметра "id"вместо использования массивов _GET или _POST.

Весь смысл в том, чтобы

  1. Перенаправить весь входящий трафик на один «фронт-контроллер»
  2. В этом файлесоздайте объект «Запрос», который содержит всю информацию, необходимую для запуска сайтаe
  3. Вызовите правильное действие (файл php) на основе информации, содержащейся в этом объекте «Запрос»
  4. Внутри действий используйте этот объект запроса для извлечения параметров, содержащихся в URL

Надеюсь, это поможет

0 голосов
/ 24 августа 2011

Примечание Google заявил , что они предпочитают news.php?id=$1 вместо news/$1, потому что им легче обнаружить переменную.Это более уместно, когда увеличение количества переменных, так как простой взгляд на ваш первый пример немного сбивает с толку:

http://www.example.com/link/param1/param1_value/param2/param2_value

Вы всегда можете объединить два параметра, если один параметр является общим как категория:

http://www.example.com/param1/?id=param2_value

Следует действительно переоценить проект, если требуется более одного параметра, а это не временный поиск.

...