У меня есть сайт, написанный на php, который создает «красивые» URL для каждого элемента (на страницах категории и поиска), например,
mysite.com/category/slug-for-item-one/1
mysite.com/category/slug-for-item-two/2
/ category / и / slug / зависит от числового идентификатора элемента
У меня есть mod_rewrite, обслуживающий фактический контент с URL-адресов:
mysite.com/view-item.php?id=1
mysite.com/view-item.php?id=2
Содержимое для каждого элемента извлекается с использованием только идентификатора элемента.
Вот мой htaccess:
RewriteEngine on
RewriteRule ^([^/\.]+)/?$ view-item.php?id=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ view-item.php?pid=$2 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ view-item.php?id=$3 [L]
Пока все нормально, но, если кто-то попадает на URL-адрес,
mysite.com/1
mysite.com/catey/slug-for-item-one/1
или
mysite.com/category/slug-item-one/1
контент все еще обслуживается, но как я могу автоматически сбросить или перенаправить на каноническую версию URL, чтобы:
mysite.com/category/slug-for-item-one/1
Я искал в SO и Google много ответов, но не повезло. Я использовал mod_rewrite только для простых перенаправлений, таких как без www. чтобы с www. и мое понимание является предварительным, поэтому я изо всех сил пытаюсь понять, как действовать в данный момент.
Кто-нибудь может указать мне правильное направление?
Спасибо всем за помощь. Очень признателен. Я работаю над реализацией ответа Джона Линя, так как я более знаком с использованием баз данных php / mysql и понимаю, как и почему он должен работать. Я собираюсь сделать это к пятнице и обновлю эту страницу, когда закончу. Большое спасибо, Карл.
* ОБНОВЛЕНИЕ *
Я реализовал ответ Джона Линя и теперь мои «красивые» URL-адреса, когда опечатки теперь перенаправляются на правильный или «канонический» URL-адрес, как в SO. Спасибо Джон и всем, кто внес свой вклад!