URL-адреса MVC3 .net 4.0 без расширения и isapi_rewrite - PullRequest
0 голосов
/ 15 декабря 2011

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Использование правила перезаписи 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 второй делает то же самое, только без мусорного барашка в конце. это для моей машины, работающей под управлением iis 7

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

0 голосов
/ 15 декабря 2011

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

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

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

...