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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Несколько вопросов по mod_rewrite
RewriteBase / //левая часть(для получения общего путя в ЧПУ)
RewriteCond %{REQUEST_FILENAME} !-d //что означает !-d(взято из статьи DeepVarvar)
RewriteCond %{REQUEST_FILENAME} !-f //что означает !-f(взято из статьи DeepVarvar)
RewriteRule ^(.*) index.php?q=$1 [L] //я так понимаю сдесь говорится, что как только ты встретишь точку читая строку сначала, подставляй index.php?q=$1 до конца строки. Но что означает [b]единица[/b] после [b]$[/b]?
И я так понимаю это не универсальный вариант. Как можно грамотно настроить ЧПУ? Что бы на основе title статьи например, формировался ЧПУ. Если можно напишите код чтоб я вбил его у себя и прощупал на примере как это работает.
301 редирект
RewriteRule ^file.php$ anotherfile.php [R=301] - все норм редиректится, но вдруг мне нужно удалять дубли если у меня настроено ЧПУ? Тоесть сайт будет доступен и так site.ru/articles/33 и так site.ru/index.php?articles=33
С точки зрения поисковиков это не есть хорошо. Поэтому думаю надо сделать 301 редирект с программных ссылок на ЧПУ ссылки. Это что каждый раз ручками нужно будет для всеъ случаев менять .htaccess? Не думаю... Хотелось бы получить грамотное объяснение как решить эти две задачи, желательно с примерами.
Заранее спасибо, надеюсь вы мне поможете )
_Dark_
Отправлено: 07 Августа, 2013 - 19:06:02
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
^(.*) значит "всё", это регулярное выражение.
$1 — это ссылка на эту маску, т.е. в $1 попадёт то, что подходит под выражение (.*), т.е., как я сказал выше, всё.
!-f и !-d значит, что выражение должно выпоняться только для того пути, который не является путем к файлу (!-file) или директории (!-dir). Восклицательный знак — это, как обычно, отрицание, нужно для того, чтобы пути к изображениям или файлам проходили напрямую, не через PHP. (Добавление)
teddy пишет:
И я так понимаю это не универсальный вариант. Как можно грамотно настроить ЧПУ? Что бы на основе title статьи например, формировался ЧПУ. Если можно напишите код чтоб я вбил его у себя и прощупал на примере как это работает.
Это универсальный вариант для систем с единой точкой входа.
Это правильный вариант, а ЧПУ вы должны делать уже через PHP.
Вам нужно смотреть на роутинг запросов.
Т.к. через mod_rewrite все запросы перенаправляются на index.php, то, например, при запросе http://site.ru/news/12 в $_GET['q'] будет /news/12.
Соответственно, в самом PHP вы должны при помощи регулярных выражений выполнить роутинг этого адреса.
Например, чтобы получить из адреса /news/12 ID новости (12) вам понадобится регулярное выражение типа news/([0-9]+).
Насчет редеректов не понял, что вы имели в виду, но ЧПУ должно делаться через PHP для большей гибкости, так что эта проблема сама решится, когда разберетесь с роутингом.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
_Dark_ пишет:
$1 — это ссылка на эту маску, т.е. в $1 попадёт то, что подходит под выражение (.*)
А что будет, если к примеру использовать $2 вместо $1 ? Эти цифры как то отличаются или есть только такое понятие как $1 ? т.к в регэксп $ означает конец строки, поэтому не очень понятно что означает единичка... Почему - описал чуть выше...
А пример можете рабочий показать? Чтоб так скопировать и все работало? Дабы прощупать это дело...
Ещё про 301 редирект очень интересно, в теме топика описал проблему
_Dark_
Отправлено: 07 Августа, 2013 - 19:19:52
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
Помог: 5 раз(а)
[+]
teddy пишет:
А что будет, если к примеру использовать $2 вместо $1 ? Эти цифры как то отличаются или есть только такое понятие как $1 ? т.к в регэксп $ означает конец строки, поэтому не очень понятно что означает единичка... Почему - описал чуть выше...
''=>function(){echo'Default callback';}// Страница по умолчанию (она же главная). Это правило выполнится в случае, если не подошло ни одно другое правило, так что должно быть всегда самым последним
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
_Dark_ пишет:
Насчет редеректов не понял, что вы имели в виду
К примеру если мы сделали ЧПУ, site.ru/news/12 то он же будет доступен и по адресу site.ru/index.php?news=12
Мне надо сделать так, что бы при запросе site.ru/index.php?news=12 происходил 301 редирект на site.ru/news/12 для того что бы удалить дубли и данная страница была доступна уже только по site.ru/news/12 и при попытке ввести site.ru/index.php?news=12
что бы редирект срабатывал на ЧПУ а не показывал послушно содержимое как то так
tuareg
Отправлено: 07 Августа, 2013 - 21:10:37
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
''=>function(){echo'Default callback';}// Страница по умолчанию (она же главная). Это правило выполнится в случае, если не подошло ни одно другое правило, так что должно быть всегда самым последним
);
_Dark_
Отправлено: 07 Августа, 2013 - 22:15:05
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
Помог: 5 раз(а)
[+]
tuareg пишет:
А оно так сработает?
А что не так?
tuareg
Отправлено: 07 Августа, 2013 - 22:34:08
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
Ну у меня он 5.2 ругается на такое объявление ф-ий
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.