Я знаю, что есть сотни статей, руководств и руководств по Mod Rewrite, но я, как правило, лучше разбираюсь в примерах, поэтому все, о чем я прошу, это быстрое преобразование URL-адреса, и я буду на своем пути (так что я может вскрыть то, что он делает, поэтому я могу применить его к другим)
У меня есть этот URL: http://www.example.com/single.php?id=1
Теперь было бы здорово, если бы он мог следовать тому же соглашению, что и Stack Overflow, где id = 1 является фактическим заголовком страницы.
У меня есть заголовок в переменной PHP, если это какая-то помощь?
Я был бы признателен, если бы кто-то мог включить это: http://www.example.com/single/here-is-my-cool-title (где последний бит является динамическим, в зависимости от переменной PHP)
Это возможно?
SO действительно имеет идентификатор сообщения и заголовок в 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 в правой части правила, а долларовые переменные заменяются совпадениями.
Вы правы в отношении количества статей по перезаписи мод – лично мне не нравится постоянно добавлять дополнительные правила, а затем беспокоиться, будет ли это правило поймано …
Для этого я предпочитаю просто передавать лот через файл корневого индекса, а затем разрешать стороне сервера решать, что с ним делать.
Посмотри на это!
В отличие от других, этот ответ даст вам решение не для конкретного вопроса, а для всей проблемы. Просто потому, что он основан на реальном жизненном опыте, а не на голой теории.
Этот ответ содержит все, что вам нужно, в том числе оптимизированную для SEO переадресацию из старых URL-адресов и кода для изменения старых сценариев, чтобы заставить их работать как обычно.
Единственное, что вам осталось сделать – это изменить код генерации ссылок на вашем сайте. Надеюсь, не большое дело.
Вы должны использовать mod-rewrite от 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]