2013-05-21 3 views
0

Из-за некорректных URL-адресов мы сгенерировали некоторые ссылки, которые не работают, и я хочу перенаправить их с перенаправлением 301, чтобы устранить некоторые проблемы с веб-мастерами с помощью Google.Htaccess Not Working - Redirect 301

Итак, у нас есть этот URL, как это:

http://www.site.com/subdomain/z//-products 

* Обратите внимание, что субдомен переменная, остальная часть URL является статическим.

В качестве побочного примечания этот URL-адрес не имеет смысла, поэтому я хочу перенаправить его. Это должно быть примерно так:

http://www.site.com/bedroom/z/12345/bedroom-furniture-products 

В любом случае, эти плохие URL-адреса были динамически сгенерированы. Мы исправили их, но Google поднял их и продолжает пытаться их проползать. Я хочу создать правило htaccess для 301 перенаправить их, и проблема должна быть окончательно вымыта.

Вот что я пытался с Htaccess но безрезультатно:

^(.*)/n//-products/?$ $1 [R=301,B] 

Я также попытался все виды перестановок этого, и это не работает. Я подозревал, что это проблема с эсперантом, но мои исследования привели меня к добавлению [B], но это тоже не сработало. Это похоже на то, что правило перенаправления работает, но оно просто перенаправляется на исходную страницу.

Что мне здесь не хватает?

+0

Очевидно, что из этого плохого URL '/ subdomain/z // - products' мы не можем перенаправить на'/bedroom/z/12345/bedroom-furniture-products'. Итак, вы должны указать свое требование, то есть на какой URI вы точно хотите перенаправить на плохие URL-адреса? – anubhava

+0

Да, вы правы.Все, что я хочу сделать, это перенаправить это:/subdomain/z // - продукты в/поддомен – Kevin

ответ

1

Я считаю, что anubhava верен, поскольку существует несогласованность между образцом URL, который вы описываете /subdomain/z//-products, и RewriteRule, который вы пытались применить. Не уверен, что это опечатка или нет. Возможно, даже в случае, если ваша операция копирования/вставки фактически добавила «/ n» буквально.

Anyhoo, давайте предполагать, что вы хотите сделать правила работы с /subdomain/z//-products:

RewriteRule ^/([^/]+)/z//\-products/?$ http://www.site.com/$1 [R=301] 

См the example 1 slides of this PDF, чтобы получить быструю первую часть. Это намного быстрее, чем использование (.*).

Мы буквально сопоставляем символ z и окружающие косые черты. Мы избегаем символа -, затем мы делаем остальную часть URL-адреса и, возможно, сопоставляем конечную косую черту. Мы используем, если память правильно используется, перенаправляют «внешний» стиль, чтобы роботы повторно открывали отдельное HTTP-соединение, добавляли согласованную обратную ссылку и передавали код состояния.

Сообщите мне, если это работает.

+0

Спасибо, я попробую это. Это черта, вызывающая ошибку? – Kevin

+0

Да, я так считаю. Я всегда избегаю персонажей, которые могут испортить рисунок. Вы буквально ищете символ «-» в URL-адресе, но поскольку вы используете парсер регулярных выражений PCRE в Apache, значение «-» имеет значение, поскольку его можно искать буквально или использовать для указания диапазона. Например: '[a-zA-Z]' задает класс символов всех строчных и всех строчных букв. Я думаю, что положить «-» без побега сломал все. Я лично использую приложение Mac OS X под названием «Шаблоны», чтобы помочь мне. Он даже выплюнет регулярное выражение на языке программирования вашего формата. – terryjbates

0

Включение mod_rewrite и .htaccess через httpd.conf, а затем поместить этот код в каталоге .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^subdomain/z/-products/?$ /$1 [L,R=302,NC] 

После того, как вы убедитесь, что он работает нормально, замените R=302 на R=301. Избегайте использования R=301 (Перманентный переадресация) при тестировании ваших правил mod_rewrite.