У меня:
RewriteRule ^Article/([^/]*)$ /article.php?newsid=$1 [L]
Это означает, что URL-адрес должен быть // example.com/Article/855563
, но Google сканирует // example.com/article. php? newsid = 855563
.
Что я могу сделать, чтобы предотвратить это? Или перенаправить 301 на example.com/Article/855563
?
Сначала вам нужно определить, почему Google сканирует неправильные URL-адреса.
Изменили ли вы существующую структуру URL-адресов (которая была проиндексирована поисковыми системами и связана с внешними ссылками)? В этом случае вам нужно было бы реализовать перенаправление со старого URL-адреса на новый, чтобы сохранить SEO и заставить поисковые системы заменять старые URL-адреса в результатах поиска.
Вы случайно ссылаетесь на неправильный URL-адрес (s ) внутренне и выставляя "неправильные" URL-адреса поисковым системам? Если это так, эти должны быть исправлены до реализации перенаправления.
В противном случае Google не смог бы обнаружить «неправильные» URL-адреса.
Вы также должны быть внедрение тега rel = "canonical"
в заголовке ваших страниц, чтобы указать правильный канонический URL-адрес для поисковых систем.
Для внешнего перенаправления URL-адреса формы /article.php ? newsid =
в / Article /
(канонический URL) - противоположность существующей внутренней перезаписи - тогда вы можете сделать что-то вроде следующего в верхней части файла .htaccess
( до существующей перезаписи):
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^newsid=([^&]*)
RewriteRule ^article\.php$ /Article/%1 [R=302,L]
Первое условие, которое проверяется на соответствие переменной среды REDIRECT_STATUS
, необходимо для того, чтобы для предотвращения цикла перенаправления - он гарантирует, что правило обрабатывается только при прямых запросах от клиента, а не перезаписывает запросы (ваша существующая директива) .
Второе условие фиксирует значение параметра URL newsid
(которое встречается в начале пути URL). Это сохраняется в обратной ссылке % 1
(используется позже в подстановке RewriteRule
). Обратите внимание, что это захватывает все (как в вашей перезаписи), однако, если значение newsid
всегда числовое, тогда это действительно должно быть более ограничительным. например. ^ newsid = (\ d +)
(только 1 или более цифр).
Обратите внимание, что в настоящее время это 302 (временное) перенаправление. Измените его на 301 (постоянное) перенаправление только после того, как убедитесь, что он работает нормально, чтобы избежать проблем с кешированием.