Красивые URL для веб-приложения - PullRequest
1 голос
/ 28 февраля 2011

Я знаю, что есть сотни статей, учебных пособий и руководств по Mod Rewrite, но я стремлюсь учиться лучше на примерах, поэтому все, что я прошу, это быстрое преобразование симпатичных URL, и я буду в пути (чтобы я мог точно анализировать, что он делает, чтобы я мог применить его к другим)

У меня есть этот URL: http://www.example.com/single.php?id=1

Теперь было бы здорово, если бы он следовал тому же соглашению, что и переполнение стека, где id = 1 - это фактический заголовок страницы.

У меня есть заголовок в переменной PHP, если это поможет?

Я был бы признателен, если бы кто-то мог превратить вышеперечисленное в: http://www.example.com/single/here-is-my-cool-title (где последний бит является динамическим, в зависимости от переменной PHP)

Это возможно?

Ответы [ 4 ]

3 голосов
/ 28 февраля 2011

Так что на самом деле идентификатор записи и заголовок в URL-адресе, но они будут использовать только идентификатор записи. Название не очень подходит, так как могут быть повторяющиеся записи (одинаковые заголовки, разные идентификаторы), изменения заголовков и т. Д. Для URL этого вопроса:

/questions/5142095/pretty-urls-for-web-application

Чтобы решить это:

/single.php?id=5142095

Правило перезаписи будет:

RewriteRule ^questions/([0-9]*)/(.*)$ /single.php?id=$1

То, что это ищет, - это начало uri (после домена) ^, слово questions, любая длина чисел `[0

Это выглядит для:

  • ^ начало URI
  • слово questions
  • косая черта /
  • переменная длина чисел [0-9]* (например, 1, 123, 1234 и т. Д.)
  • косая черта /
  • любая длина любого символа .* (т. Е. Заголовок вопроса)
  • $ конец URI

Когда совпадение символов (например, [0-9] * или. *) Заключено в скобки, mod_rewrite помещает результат совпадения в пронумерованную переменную доллара. В приведенном выше правиле [0-9]* соответствует любому числу (и любой длине чисел) и помещает его в $1. Второе совпадение .* соответствует любой длине любого символа и помещает совпадение в $2.

Ваша заявка получит URI справа от правила, с долларовыми переменными, замененными на совпадения.

1 голос
/ 28 февраля 2011

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

Этот ответ содержит все, что вам нужно, включая SEO-дружественное перенаправление с URL-адресов старого стиля и код для изменения старых скриптов, чтобы они работали как обычно.

Вам остается только изменить код генерации ссылок на вашем сайте. Надеюсь, ничего страшного.

1 голос
/ 28 февраля 2011

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

С этой целью я предпочитаю просто передать лот в корневой индексный файл, а затем разрешить стороне сервера решать, что с ним делать.

Посмотрите на это.

0 голосов
/ 28 февраля 2011

Вы должны использовать модификацию Apache, вот пример:

    <Directory /www/yoursite/>
            RewriteEngine On
            RewriteRule ^single/?(.*)?/?$ article.php?id=$1 [L]
    </Directory>

Редактировать: хорошая идея добавить целочисленный идентификатор к вашему перезаписи, например:

                RewriteRule ^single/([0-9]+)/?(.*)?/?$ article.php?id=$1&text=$2 [L]
...