2009-08-01 2 views
0

При просмотре статистики для моего сайта я понял, что подавляющее большинство трафика поступает через сторонние ссылки на классические страницы ASP, которые не существуют в течение нескольких лет Теперь.Использование регулярных выражений UrlRewriter Intelligence .asp на странице холдинга

я решил, что добавление кучу urlMappings в web.config не была отличная идея, так что я добавил UrlRewrite и интеллигенция попыталась добавить правило, следующим образом:

<rewriter> 
    <redirect url="^/(.*).asp$" to="~/pagenotfound.aspx?page=$1" /> 
    </rewriter> 

правило работает, но он берет любой URL-адрес, который заканчивается на .asp =, например /pagenotfound.aspx?page=someurl.asp.

Упс :)

Я не совсем хорошо осведомлены о регулярных выражениях, как я могу это игнорировать «.asp», который следует символ со знаком вопроса?

ответ

2

Попробуйте это:

<rewriter> 
    <redirect url="^/([^?]*)\.asp(\?.*)?$" to="~/pagenotfound.aspx?page=$1" /> 
    </rewriter> 

Это должно сделать его игнорировать любой URL, который заканчивается в .asp, но содержит? перед этим. [^?] Означает «любой символ, который не является?» вместо *, что означает «любой символ».

Редактировать: добавлен дополнительный шаблон, позволяющий строки запроса после расширение .asp, но не до них.

+0

Dav, Благодарим за отзыв. Хотя это работает, это означает, что он больше не поднимает страницы .asp с строкой запроса, которая является своего рода победой моей цели - мне нужно обнаружить любой законный URL-адрес .asp и перенаправить, не захватывая .asp, который, случается, находится в запросе строка. Thanksl – 2009-08-01 12:26:50

+0

Heya Richard - вы должны иметь возможность расширять регулярное выражение url, чтобы добавить потенциал для строки запроса после расширения .asp. Я отредактировал мой пример выше для чего-то, что я * считаю * будет работать (не 100% конечно, если я прикрепил к нему синтаксис, хотя). – Amber

+0

Я также добавил обратную косую черту, которая должна быть перед этим первым периодом (для .asp) - в противном случае он будет интерпретировать его как регулярный период регулярного выражения, который соответствует любому символу (вместо буквального периода), что приведет к его неправильно сопоставляя что-то вроде /test.asp?asp – Amber

0
<rewrite url="^~/browse/([^/.]+)\.aspx?$" 
to="~/browse-prints.aspx?dispCat=$1"/> 

<rewrite url="^~/browse/([^/.]+)\.aspx(\?.*)?$" 
to="~/browse-prints.aspx$2&amp;dispCat=$1"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^