URL-адреса без расширения MVC3 .net 4.0 и isapi_rewrite

К сожалению, я вынужден использовать 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/generator-parallel-capability/([^/])/([^/])$ /generators /htmlcontent/generator-parallel-capability/$1/$2 [NC,L]

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

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


person jason    schedule 14.12.2011    source источник


Ответы (2)


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

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

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

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

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

person jason    schedule 29.12.2011