Перезапись URL, как избежать смущения URL? - PullRequest
3 голосов
/ 20 апреля 2011

На многих сайтах переопределение URL-адресов осуществляется на основе URL-адреса, аналогичного

/news/ArticleID/Some-Title-Text-Goes-Here/

. Примените правило перезаписи в соответствии с

Rewrite /news/([0-9]*)/.* /news/article.lang?ArticleID=$1*.1009 *

Итак

/news/123/Lorem-Ipsum/

переписано на

/news/article.lang?ArticleID=123

Поскольку все это заботит, это идентификатор статьи,текст заголовка может быть любым.

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

Статья здесь

http://www.independent.co.uk/life-style/food-and-drink/kate-middleton-jelly-bean-expected-to-fetch-500-2269573.html

имеет URL-адрес, измененный на

http://www.independent.co.uk/life-style/food-and-drink/utter-PR-fiction-but-people-love-this-shit-so-fuck-it-lets-just-print-2269573.html

Этот модифицированный URL был опубликован в твиттере и быстро стал вирусным, вызывая большое смущение для рассматриваемой газеты.

Каков наилучший способ предотвратить это / смягчить последствия, не теряя преимущества переписывания URL-адреса?

(я отмечаю, стекВопросы переполнения выбрасывают 301 на правильный URL, если вы измените его URL,это достаточно очевидно для большинства пользователей или у нас должен быть текущий канонический URL-адрес и список априоров с 301 по каноническому и все остальные 404?)

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

В сценарии, отображающем статью, убедитесь, что запрошенный URI соответствует заголовку с переносом слов, который вычисляется из заголовка статьи в базе данных. Если он не совпадает, сделайте что-то вроде 404.

Например, если у вас есть реальный заголовок статьи в $article['title'], если часть заголовка запрошенного URI анализируется как $requested_title, а pretty_for_uri($input) превращает строку в URI-дружественную строку с переносами, вы бы хочу проверить, что

$requested_title == pretty_for_uri($article['title'])
0 голосов
/ 20 апреля 2011

Приведенный выше трюк работает, потому что он заканчивается на <article-id> .html, а часть между разделом бумаги и идентификатором игнорируется.Просто попробуйте

http://www.independent.co.uk/life-style/food-and-drink/foo-2269573.html

, который также работает.

Плохой URL-адрес был получен не из укороченного URL-адреса, а скорее из-за умственного расширения-URL-адреса и схемы URL, которая независимаhas.

Реальный сокращатель URL должен создать что-то вроде (то, что вы написали) /news/article.lang?ArticleID=123 и затем проверить, что введенный URL следует этой форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...