2011-12-14 5 views
0

К сожалению, я вынужден использовать IIS6 для своего веб-сайта MVC. .net 4.0 добавляет функциональность для имитации глупого взлома для получения URL-адресов без расширения для работы в IIS6. Мой сайт разработан, чтобы воспользоваться возможностью перезаписи URL-адресов для целей SEO. Ключевые URL-адреса, которые клиент хочет использовать, диктуют сложную схему перезаписи URL-адресов.MVC3 .net 4.0 без расширения URL-адресов и isapi_rewrite

Проблемы с внедрением Microsoft для этой функции действительно сводятся к переписыванию URL-адресов и попытка сопоставить шаблон. Я видел различные правила, которые пытаются удалить страшный eurl.axd из URL-адреса, чтобы шаблоны соответствовали друг другу. Я пытался использовать эти правила

RewriteRule^(. ) /eurl.axd/ [а-f0-9] {32} (.) $ $ 1 $ 2 или RewriteRule (. ) eurl.axd/, $ 1

который действительно работает, но он также вводит другие проблемы при наличии вложенных перенаправлений. то есть обработка старых URL-адресов на новые, и т. д.

Что происходит, когда eurl.axd убирается, а при перенаправлении isapi_filter не получает запрос, который приводит к ошибке IIS 404.

Трюк с URL-адресами, я придумал это возможное решение.
RewriteRule^Генераторы/генератор параллельно-потенциал/([^ /] )/([^ /]) $/Генераторы/htmlcontent/генератор параллельно-потенциал/$ 1/$ 2 [NC, L]

он просто захватывает часть eurl.axd и переписывает ее на исполняемый URL с добавлением.

Есть ли лучший способ? У меня есть несколько сотен URL-адресов, которые соответствуют этому шаблону, и было бы неплохо, если бы одно правило обрабатывало их все.

ответ

0

Использование правила перезаписи RewriteRule ^(.)/eurl.axd.$ $1 [NC] приводит к некорректному поведению, когда URL-адрес переписывается более одного раза. то есть от старого URL-адреса до нового URL-адреса тщеславия, а затем до фактического URL-адреса выполнения.

Используя карты, я смог создать шаблон, который работает довольно хорошо и не позволяет файлу .htaccess быть загроможденным.

RewriteCond ${contentmap:$2} >"" [NC] 
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /$1/${contentmap:$2}/$2/$3/$4 [NC,L] 
RewriteCond ${contentmap:$2} >"" [NC] 
RewriteRule ([^/]*)/([^/]*)$ /$1/${contentmap:$2}/$2 [NC,L] 

Первый определяет шаблон /controller/some-content/eurl.axd/1234 и переписывает его /controller/some-controller-action/eurl.axd/1234 второй делает то же самое только без Eurl мусор в конце. это для моей машины dev iis 7

Я уверен, что есть лучшие способы, и я, безусловно, открыт для лучших предложений.

0

Мы использовали один общее правило на вершине конфигурации, чтобы сократить /eurl.axd234234

RewriteRule^(. ) /eurl.axd. $ $ 1 [NC]

Это должно работать на все, кроме корня.