Я разработал блог с нуля, и все прошло отлично. Я, наконец, начал писать свой первый пост / статью, и я ожидал, что Google проиндексирует эту конкретную страницу, чтобы убедиться, что с ней нет никаких проблем. Ну, google в настоящее время индексирует одну и ту же страницу 4 раза, у меня есть (с помощью пользователей из stackoverflow) mod_rewrite на моем htaccess, чтобы переписать все URL-адреса на дефисы, исходящие из определенного файла (article.php).
Моя текущая статья выглядит так. Например: www.site.com/article.php?article_id=10&article_title=friendly url goes over here
с mod_rewrite Я изменил URL-адреса на следующее.
www.site.com/article/id/friendly-url-goes-over-here
но Google, похоже, индексирует ту же страницу 4 раза, как это сделать ..
www.site.com/article/10/friendly-url-goes-over-here www.site.com/article/10/friendly-url-goes%20over%20here www.site.com/article/10/friendly-url%20goes%20over%20here www.site.com/article/10/friendly%20-url%20goes%20over%20here
Почему это индексирование 4 той же страницы? Кажется, он индексирует страницы, сколько раз каждый дефис вставлен, поэтому, если было 10 делений, я предполагаю, что Google будет индексировать 10 той же страницы. Вот весь мой файл htaccess.
RewriteEngine on # add www before hostname RewriteCond %{HTTP_HOST} ^oddify\.co$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE] # if on article page, get slugs and make into friendly url RewriteCond %{THE_REQUEST} \s/article\.php\?article_uid=([^&]+)&article_title=([^&\ ]+) RewriteRule ^ /article/%1/%2/? [L,R=302,NE] # if page with .php is requested then remove the extension RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1/ [R=302,L,NE] RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R] # Force a trailing slash to be added RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} \s/+([^.]+?[^/.])[\s?] [NC] RewriteRule ^ /%1/ [R=302,L] # allow page direction to change the slugs into friendly seo URL RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (?:^|/)article/([^/]+)/([^/]+)/?$ /webroot/article.php?article_uid=$1&article_title=$2 [L,QSA,NC] # silently rewrite to webroot RewriteCond %{REQUEST_URI} !/webroot/ [NC] RewriteRule ^ /webroot%{REQUEST_URI} [L] # .php ext hiding RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L]
Я написал этот вопрос несколько дней назад, я обязательно деиндексировал страницы из Google, а теперь google пошел вперед и повторно проиндексировал их одинаково.
Вот страницы google, показывающие 4 страницы индекса: страница поиска google
Попробуйте изменить это перенаправление на 301:
RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R=301]
Статус 301 сообщает google (и браузеру и другим клиентам), что перенаправление является постоянным, а старый URL (один с пробелами) больше не следует рассматривать.
Проблема с вашим файлом .htaccess заключается в том, что для каждого места в заголовке он будет делать одно перенаправление. Это может быть или не быть исправлено с помощью постоянного перенаправления ( 301
), но даже тогда браузер даст ошибку (обнаружен цикл переадресации), если в заголовке появилось слишком много пробелов. Вы можете исправить обе проблемы, просто сделав все это на сервере:
RewriteRule ^article/([^\ ]*)\ ([^\ ]*\ .*) /article/$1-$2 [N] RewriteRule ^article/([^\ ]*)\ ([^\ ]*)$ /article/$1-$2 [L,R=301]
Первое правило совпадает, если в URL-адресе появляется как минимум 2 пробела, и будет перезаписано одно из пространств и попросит Apache снова просмотреть файл .htaccess
( [N]
). Если останется только одно место, второе правило будет соответствовать, и, кроме того, чтобы переписать это последнее пространство, оно также перенаправит пользователя. Это будет только одно перенаправление, и, надеюсь, постоянное перенаправление приведет к тому, что в Google будет отображаться только новый URL-адрес.
Если в URL-адресе больше пробелов, чем есть внутренние рекурсии, разрешенные Apache, это приведет к ошибке внутреннего сервера. Если у вас есть доступ к httpd.conf
, вы можете изменить LimitInternalRecursion
чтобы разрешить больше внутренних рекурсий. Предупреждение. Установите для этого значение SANE. Если по какой-то причине у вас бесконечный цикл в RewriteRules, и этот номер безумно высок, вы заблокируете свой сервер, пока он не достигнет этого предела. См. Документацию .