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 :: Помогите с .htaccess RewriteRule

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помощь по правилу
Exponat
Отправлено: 23 Августа, 2013 - 10:18:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Добрый день.
Таким правилом
PHP:
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteRule ^index.php$ / [QSA,R]

я делаю адрес на
А вот как сделать адрес
PHP:
скопировать код в буфер обмена
  1. http://domain.com/index.php?action=news
на
и
PHP:
скопировать код в буфер обмена
  1. http://domain.com/index.php?action=news_inf&id=26229
на

Хотел спросить, влияет ли такие манипуляции на поисковые системы? Нужно ли так делать? Я извиняюсь если тема похожа на другие. Их правила как-то не подходят для меня...может это связано с настройками сервера....

(Отредактировано автором: 23 Августа, 2013 - 10:34:52)

 
 Top
Ch_chov
Отправлено: 23 Августа, 2013 - 10:40:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Exponat пишет:
влияет ли такие манипуляции на поисковые системы?

Поисковики не любят дубли. Делайте 301 редирект. И если таких страниц много, то лучше это делать не в .htaccess.
 
 Top
Exponat
Отправлено: 23 Августа, 2013 - 11:04:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




А редирект 301 єто не физический перенос страниц?
Как я прочитал удобнее будет использовать php редирект:
PHP:
скопировать код в буфер обмена
  1. <?
  2. Header( "HTTP/1.1 301 Moved Permanently" );
  3. Header( "Location: http://www.new-url.com" );
  4. ?>


У меня есть статическая шаблон-страница news_inf.php в которую выводятся полнотекстовые новости. Просто их id меняется. Это получается нужно код вставить в страницу вывода динамических новостей (news_inf.php). Например если у меня новость имеет адрес:
PHP:
скопировать код в буфер обмена
  1. http://domain.com/index.php?action=news_inf&id=26229

то в странице я пишу
PHP:
скопировать код в буфер обмена
  1. <?
  2. Header( "HTTP/1.1 301 Moved Permanently" );
  3. Header( "Location: http://www.domain.com/news/26229" );
  4. ?>

Так?
 
 Top
LifePlay
Отправлено: 23 Августа, 2013 - 11:12:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Перенаправляешь любой запрос в index.php, у меня так:
PHP:
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} !(.ico)
  5. RewriteRule ^(.*)$ index.php [QSA,L]


А в index.php анализируешь $_SERVER['REQUEST_URI'], это называется фронт контролер.
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Августа, 2013 - 11:14:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Exponat, 2 варианта.
В обоих случаях ссылки уже должны быть такого вида:
Exponat пишет:
http://domain.com/news


А в .htaccess уже преобразовываться в
Exponat пишет:
http://domain.com/index.php?action=news


... или же перенаправляются все вызовы в index.php с помощью того же .htaccess и там уже (в index.php)
разбираете $_SERVER['REQUEST_URI'].

(Отредактировано автором: 23 Августа, 2013 - 12:05:16)

 
 Top
Exponat
Отправлено: 23 Августа, 2013 - 11:31:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Ого....на сколько я понял весь этот процесс называется ЧПУ-ссылки. И он не просто. Нужно много почитать и посмотреть примеров. Это не делается за 20 минут... Я новичок. Спасибо что направили на верный путь Улыбка
 
 Top
Exponat
Отправлено: 27 Августа, 2013 - 10:52:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Продолжая эту тему я выяснил что сначала нужно mod_rewrite привести машинные ссылки в нормальные ЧПУ. А потом чтоб не потерять ссылочный вес ссылок редиректить их 301-ым.

Я вот тут пробую...может кому пригодится...

CODE (htmlphp):
скопировать код в буфер обмена
  1. Options +FollowSymLinks
  2. RewriteEngine On
  3.  
  4. # преобразовываю в ЧПУ ссылки таких видов: http://www.domain.info/?action=news_inf&id=26261 на такие: http://www.domain.info/news-26261
  5. RewriteRule ^news-([^/]*)$ /?action=news_inf&id=$1 [L]
  6.  
  7. # преобразовываю в ЧПУ ссылки таких видов: http://www.domain.info/index.php?action=news на такие:http://www.domain.info/news.html
  8. RewriteRule ^([^/]*)\.html$ /?action=$1 [L]


А теперь редииректим 301 чтоб не потерять ссылочный вес. Ведь все что написано сверху - это дубляж. Нужно исключить базовый вариант ссылок и всегда редиректить их всем юзерам и поисковым системам.

CODE (htmlphp):
скопировать код в буфер обмена
  1. # 301 Redirect домен без index.php
  2. RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index.php
  3. RewriteRule .* / [R=301,L]
  4.  
  5. # 301 Redirect сайт всегда на www
  6. RewriteCond %{HTTP_HOST} ^domain\.info$ [NC]
  7. RewriteRule ^(.*)$ http://www.domain.info/$1 [R=301,L]
  8.  
  9. # 301 Redirect такой ссылки http://www.domain.info/?action=news на такую http://www.domain.info/news.html. Уже дубль закрыли.
  10. RewriteCond %{QUERY_STRING}  ^action=news$ [NC]
  11. RewriteRule ^$ /news.html? [R=301,NE,NC,L]


Но у меня вопрос к последнему редиректу. Я в нем указал конкретную страницу. А можно как-то указать регулярным выражением на все страницы типа: ? Ну например: http://www[dot]domain[dot]info/?action=любое название страницы на http://www[dot]domain[dot]info/любое название страницы

CODE (htmlphp):
скопировать код в буфер обмена
  1. # 301 Redirect всех ссылок типа http://www.domain.info/?action=любая страница (регулярное выражение) на такую http://www.domain.info/(имя страницы с условием регулярного выражения).html.
  2. RewriteCond %{QUERY_STRING}  ^action=(?????)$ [NC]
  3. RewriteRule ^$ /(???).html? [R=301,NE,NC,L]


Имею ввиду чтоб не писать каждое правило для конкретной страницы. Цыфр там нет, просто буквы.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB