301 перенаправляет вместе с перезаписью URL, чтобы уменьшить URL с параметрами запроса
Итак, у меня на сервере (IIS 7) настроена перезапись URL, так что, например,
http://example.org/p/1234/
действительно
http://example.org/product/?product_id=1234
(С / product /, содержащим индексный файл для веб-приложения, которое может обрабатывать параметры запроса).
Проблема в том, что я хочу, чтобы все использовали /p/1234/
URL сейчас, поэтому я хотел бы отправлять 301 редирект каждый раз, когда кто-то посещает старый URL /product/?product_id=1234
, но, насколько я могу судить, когда происходит перезапись URL, насколько сервер заинтересован, пользователь пошел /product/?product_id=1234
,
Хотя в адресной строке браузера это может сказатьhttp://example.org/p/1234/
, когда я делаю дамп заголовков и переменных CGI,/p/1234/
не отображается ни в одной из переменных.
Думаю, меня беспокоит то, что даже если я смогу это сделать, кажется, что простой запрос будет довольно запутанным:
- Идти к
/p/1234/
- Перепишите его
/product/?product_id=1234
- Это было изначально
/p/1234/
? (да) - Ничего не делать.
И в противном случае:
- Идти к
/product/?product_id=1234
- Это было изначально
/p/1234/
? (нет) - 301 Перенаправить на
/p/1234/
- Перепишите его
/product/?product_id=1234
- Это было изначально
/p/1234/
? (да) - Ничего не делать.
Я знаю, что в конечном итоге некоторые поисковые индексы удалят старые URL-адреса в пользу тех, которые указаны в редиректе 301, но до тех пор это кажется чрезмерной нагрузкой для серверов.
Кроме того, если бы я это настроил, есть ли фильтр, который я мог бы использовать в IIS для этого, или мне нужно было бы добавить логику в мое веб-приложение?
Обратите внимание, что я настроил <link rel="canonical".../>
для всех этих веб-страниц, но я все еще вижу старый формат, отображаемый в результатах поиска.