Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблемы с htaccess и ЧПУ
Форумы портала PHP.SU » » Вопросы новичков » Проблемы с htaccess и ЧПУ

Страниц (1): [1]
 

1. remenikomer - 13 Января, 2013 - 10:11:40 - перейти к сообщению
Есть файл с правилами, типа:
RewriteRule ^(.*)/list/([0-9]+)/([0-9]+)?([/])?$ $1/list.php?catid=$2&page=$3

Хочу перенаправить со всех субдоменов, при условии, что путь с субдоменом: subdomen.site.ru/articles/
А направить на без субдомена (отрезать его).

Но сейчас проблема в другом - что бы не исправлял в htaccess, ничего не происходит. Как будто какой-то кэш используется. Писал правила с 301 редиректом. Может он что-то сделал?
Как заставить использовать измененных htaccess?
2. esterio - 13 Января, 2013 - 10:47:05 - перейти к сообщению
Ето называетьсяфронт контролером
Вот здесь я уже писал как такое делать
http://forum.php.su/topic.php?fo...32705#1358032705
3. remenikomer - 13 Января, 2013 - 11:08:41 - перейти к сообщению
esterio пишет:
Ето называетьсяфронт контролером
Вот здесь я уже писал как такое делать
http://forum.php.su/topic.php?forum=71&topic=8633&postid=1358032705#1358032705

спасибо конечно, но я ничего не понял из приведенного примера.
Что нужно сделать, чтобы кэш этот обновлять при необходимости или на время экспериментов?
А еще лучше, помогите, пожалуйста, сформировать нужные ЧПУ.

Как и писал выше, нужно при запросе каталога статей отрезать субдомены (это разные города) и направлять в каталог статей на основном домене.
Есть правила для создания ЧПУ из динамических урл. Поэтому новые правила нужно писать вверху кода и с окончательным параметром (указать L, вроде). А также не знаю, какие правила писать, то ли уже готовые ЧПУ урл перенаправлять, то ли динамические с параметрами $1, $2 и т.д. (в 1-м посте пример правил указал)
Сделал:
PHP:
скопировать код в буфер обмена
  1.  
  2. RewriteCond %{http_host} ^(.+)\.site.ru/articles/ [nc]
  3. RewriteRule ^(.*)$ http://site.ru/articles/$1 [R=302,L]
  4.  


Но ничего не работает. Получилось только сделать для ссылки раздела. А если обращаться к категории статей или просмотру статьи, то правило не работает. Пробовал и условия убирать, менять, ничего не получается.

Вот что еще для правил есть:
PHP:
скопировать код в буфер обмена
  1.  
  2. RewriteRule ^(.*)/show-([0-9]+)([\-])?([0-9]+)?\.html$ $1/show.php?itemid=$2&page=$4
  3. RewriteRule ^(.*)/show/([0-9]+)/([0-9]+)?([/])?$ $1/show.php?itemid=$2&page=$3
  4. RewriteRule ^(.*)/list-([0-9]+)([\-])?([0-9]+)?\.html$ $1/list.php?catid=$2&page=$4
  5.  
4. esterio - 13 Января, 2013 - 11:35:40 - перейти к сообщению
1. все запросы обрбляет один файл index.php
2. пропускаются файлы которые существуют и директории
3. все сабдомены должны иметь в качестве documentroot тодну папку
5. remenikomer - 13 Января, 2013 - 11:39:19 - перейти к сообщению
esterio пишет:
1. все запросы обрбляет один файл index.php
2. пропускаются файлы которые существуют и директории
3. все сабдомены должны иметь в качестве documentroot тодну папку

я с полу слова не могу понять... я php знаю, не профи, но знаю. А htaccess не знаю. Только вот сейчас стал изучать, т.к. столкнулся с необходимостью.
Субдомены - виртуальные.
Я сделал так:
PHP:
скопировать код в буфер обмена
  1. RewriteCond %{http_host} ^(.+)\.site.ru [nc]
  2. RewriteRule ^(.*)$ http://site.ru$1 [R=302,L]

и все субдомены стали переадресовываться. Но мне нужно только субдомены по указанному пути, точнее разделы статей на всех субдоменах, а другие разделы на них так как и есть.


Можно как-нибудь понятнее?
6. esterio - 13 Января, 2013 - 12:01:10 - перейти к сообщению
RewriteRule ^(.*)$ http://site[dot]ru$1 [R=302,L]
Неверно, может так
RewriteRule .* http://site[dot]ru [L]
Зачем 302 ответ. Если будет поисковый бот, то ему не нужно знать что у вас там куда перенаправляеться
7. remenikomer - 13 Января, 2013 - 12:04:46 - перейти к сообщению
esterio пишет:
RewriteRule ^(.*)$ http://site[dot]ru$1 [R=302,L]
Неверно, может так
RewriteRule .* http://site[dot]ru [L]

это куда, вместо моих строк? А как же раздел статей?

esterio пишет:
Зачем 302 ответ. Если будет поисковый бот, то ему не нужно знать что у вас там куда перенаправляеться

Как раз это для поискового бота. Чтобы убрать дубли со всех городов и сделать их только для основного.
Вообще-то я делаю 301 редирект. Но т.к. у меня непонятный кэш какой-то, то я попробовал 302 редирект (временный).
Сейчас некоторые урл не изменяются даже при смене htaccess. Его меняю, а урл как были старые, так и остаются и не меняются никак. Скинуть чего - не знаю.
8. esterio - 13 Января, 2013 - 12:13:06 - перейти к сообщению

Даа сложно будет обьяснить но спробую


CODE (htaccess):
скопировать код в буфер обмена
  1. RewriteEngine on
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Идем по шагам. И так припустим мы запрашиваем страницу example.com/about/us1.
1. ключаем реврайт
2. проверяем есть ли такая папка
3. проверяем есть ли такой файл
4. всю строку запроса(а именно /about/us1) помещяем в GET парпаметр route
В итоге у нас запрос следующий example.com/index.php?route=/about/us1
Ни для браузера ни для бота даный процес не виден. Он твердо уверен что такой файл существует

И так далее в index.php прописиваем
PHP:
скопировать код в буфер обмена
  1. $route = isset($_GET['route']) ? explode('/', trim($_GET['route'], '/')) : array('index');

В итоге переменная $route в нашем случае
PHP:
скопировать код в буфер обмена
  1. array('about', 'us');


А далле можно switch..case перебор делать
PHP:
скопировать код в буфер обмена
  1. switch($route[0])
  2. {
  3.         case 'page':{
  4.                 // DO ANY ACTION
  5.         } break;
  6.  
  7.         default:
  8.                 // SHOW 404
  9. }
9. remenikomer - 13 Января, 2013 - 12:19:47 - перейти к сообщению
но это не то вроде как.
Мне не нужно править php, да и не могу я его исправить, т.к. он под zend. Мне лишь нужно избавить статьи в разных городах от поисковиков, чтобы не было дублей.
Поэтому нужно сделать 301 редирект. А т.к. php закодирован, значит можно только прописывать в htaccess - работать с тем, что есть.
все преобразования урл из динамики в статику сделаны (ЧПУ). Нужно только добавить исключения для разделов статей на всех субдоменах.
(Добавление)
кэш то у htaccess есть какой-то? Его как-то можно обновлять? А не то один субдомен редиректиться до сих пор, хотя в htaccess давно все правила удалил
10. esterio - 13 Января, 2013 - 17:00:13 - перейти к сообщению
remenikomer пишет:
кэш то у htaccess есть какой-то

кажется нету. Все меняется на лету
11. remenikomer - 13 Января, 2013 - 20:41:10 - перейти к сообщению
Вроде понял в чем проблема. Очищаю все настройки браузера (вообще все, куки, историю и т.п.) и все скидывается. Странно.
12. remenikomer - 14 Января, 2013 - 12:03:12 - перейти к сообщению
Подскажите как правильно писать нисколько условий RewriteCond для одного правила?
Пишу
PHP:
скопировать код в буфер обмена
  1.  
  2. RewriteCond %{http_host} ^(.+)\.site.ru [AND]
  3. RewriteCond %{REQUEST_URI} ^/news/ [nc]

И сервер выдает ошибку. Если использовать одно из двух условий, то они срабатывают. Параметр [and] ведь вроде так указывается. А не хочет срабатывать. Может чего не так делаю?

 

Powered by ExBB FM 1.0 RC1