gormarket

gormarket
Рейтинг
47
Регистрация
29.12.2010

Деймос,

при использовании

RewriteCond $1 \.php$

у Вас кажется происходит повторное применение правила,

попробуйте добавить еще исключение для страницы city.php,

т.е. сделать так

RewriteCond %{HTTP_HOST} !^www.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteCond $1 !^city\.php$

RewriteCond $1 \.php$

RewriteRule (.*) city.php?city_link=%1 [L]

Деймос:
При переходе на ufa.site.ru функционал работает, а вот js и css не подгружаются...

они в тексте страницы прописаны с относительными путями, и получается что запрашивается что-то типа

ufa.site.ru/css/style.css

ufa.site.ru/js/funcs.js и т.д.

и в конечном итоге Вы наверно получаете (как результат добавленного реврайта)

city.php?city_link=css/style.css

но не обрабатываете в city.php подобные запросы

Попробуйте исключить из обработки этим реврайтом файлы стилей и скрипты

RewriteCond %{HTTP_HOST} !^www.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteCond $1 !\.(css|js)$

RewriteRule (.*) city.php?city_link=%1 [L]

можно добавить еще для исключения другие расширения для файлов с основного домена css|js|jpg|swf и так далее

А если реврайт c поддомена делается только для конкретных расширений, например htm или php, то проще описать не исключения, а эти расширения,

изменив 3 строку так

RewriteCond $1 \.php$

или так

RewriteCond $1 \.(htm|php)$

Деймос,

чтобы использовать в подстановках значения в скобках из шаблонов в RewriteCond, нужно писать %1 (и до %9), в отличии от значений из шаблонов в RewriteRule, которые обозначаются $0 (это весь шаблон) и $1 - $9 (это то что в скобках)

попробуйте так

RewriteEngine On

RewriteCond %{HTTP_HOST} ^site.ru$

RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

это оставляете как есть (редирект с адреса без www на адрес с www),

а дальше так

RewriteCond %{HTTP_HOST} !^www\.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteRule (.*) /city.php?city_link=%1 [L]

Т.е в элементе масива ГЕТ ["city_link"] в city.php Вы будете иметь поддомен, а если вам нужен и адрес запрошенной страницы на этом поддомене, то можете сделать так (чтоб в элементе ["url"] иметь адрес страницы)

RewriteCond %{HTTP_HOST} !^www\.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteRule (.*) /city.php?city_link=%1&url=$1 [L]

Это все конечно будет работать при нормальной настройке DNS, когда все поддомены будут переадресовываться на основной домен

Можете проверить это в логах сервера, если там есть кроме www.site.ru и site.ru и другие поддомены, то с настройкой DNS все в норме, нужно только настроить реврайты.

Zdorova,

если у Вас в роботс есть другие секции User-agent кроме

User-agent: *

то нужно прописать

Disallow: /?index=try1

Disallow: /eng/?index=try1

в каждой секции User-agent (строчки работают и без * в конце, проверял у Яндекса)

Но более надежно сделать редиректами через .htaccess запрет для доступа ботов, проверяя в RewriteCond значение %{HTTP_USER_AGENT} на соответсвие наиболее активным ботам.

Попробуйте посмотреть в поиске запрет индексации через htaccess

enton, попробуйте такой вариант

RewriteRule ^(.+)\ $ http://%{HTTP_HOST}/$1 [R=301,L]

В общем случае где-то так:


RewriteCond %{QUERY_STRING} ^(.*)pagenum=[0-9]+(.*)$ [NC]
RewriteRule ^index\.php$ http://%{HTTP_HOST}/$0?%1%2 [R=301,L,NC]

при этом лишний символ "&" после редиректа может остаться

добавьте флаг QSA

RewriteRule ^category/(.*)\.html$ /category.php?id=$1 [L,QSA]


'qsappend|QSA' (добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление а не замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в строку запроса с помощью директив преобразований.

"more-5" это якорь на странице http://site.com/tsentr-razvitiya/ (ссылка на ту часть страницы, где расположен элемент с атрибутом name="more-5")

Для поисковиков эта пара

http://site.com/tsentr-razvitiya/

http://site.com/tsentr-razvitiya/#more-5

не два URLа, а один (все что до символа #)

Так что забудьте про эти, как Вы их назвали "дубли страниц"

postavkin, может Вам действительно достаточно двумерного ассоциированного массива ?

Например что-то типа $arrBrand['nokia']=array();

$namesf = array('nokia', 'samsung');

$arrBrand=array();

foreach ($namesf as $value) {

$name = $value; // получили запись $name=nokia, далее $name=samsung...

$arrBrand[$value] = array();

}

И будете иметь в результате пару массивов (пока пустых)

$arrBrand['nokia']

$arrBrand['samsung']

anbura:
Ещё вопрос про 302 редирект, нужно просто заменить 301 на 302? И нужна ли буква L в этом случае?

Просто замените на 302.

флаг L (означающий что это последнее преобразование) нужен (если Вы не хотите применять к новому URL дальнейшие правила преобразований, расположенные ниже по файлу htaccess)

Всего: 437