У меня есть управляемый базой данных сайт ASP.NET, который использует одну страницу APSX для отображения всех страниц сайта.Таким образом, все URL-адреса сайта имеют следующий формат:
/main.aspx?page=Page+Title+One
/main.aspx?page=Another+Article+Title
К сожалению, Google проиндексировал многие несуществующие URL-адреса, в основном вырезав часть строки запроса.Например:
/main.aspx?page=Page+Title or /main.aspx?page=Page
вместо правильного:
/main.aspx?page=Page+Title+One (this is indexed by Google as well of course).
Я пытаюсь добиться, если имя страницы строки запроса не имеет соответствующей записи вмоя БД, чтобы заставить сервер 404 ошибки, во-первых, для лучшего пользовательского опыта, а затем, чтобы сказать Google, что эти страницы не существуют.
Вот мой код и не работает.Я имею в виду, что он просто отображает пустую страницу в IE 8 и ошибку в последнем Firefox:
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.StatusCode = 404;
System.Web.HttpContext.Current.Response.Status = "404 Not Found";
System.Web.HttpContext.Current.Response.End();
Я вижу правильный код 404 в своих журналах, однако я не перенаправлен на страницу ошибок, указанную вmy web.config:
<customErrors mode="On">
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
Что я делаю не так?
Еще одна вещь, которая меня беспокоит, это то, что я успешно форсирую ошибку 404 для любых записей строки запроса, которые не имеютсовпадение в моей базе данных, разве это не повлияет на саму страницу main.aspx и на все мои существующие страницы?Вот что я имею в виду:
I 404 main.aspx? Page = Non-Existing-Title, однако мой 404 влияет на main.aspx с любыми строками запроса, включая допустимые, например, main.aspx? Page = Existing-Title.
Сайт работает на IIS6 / Win 2003.
Спасибо за вашу помощь!
Джон