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 RewriteRule
Форумы портала PHP.SU » » Вопросы новичков » Помогите с .htaccess RewriteRule

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

1. Exponat - 23 Августа, 2013 - 10:18:57 - перейти к сообщению
Добрый день.
Таким правилом
PHP:
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteRule ^index.php$ / [QSA,R]

я делаю адрес
на

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

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


Хотел спросить, влияет ли такие манипуляции на поисковые системы? Нужно ли так делать? Я извиняюсь если тема похожа на другие. Их правила как-то не подходят для меня...может это связано с настройками сервера....
2. Ch_chov - 23 Августа, 2013 - 10:40:10 - перейти к сообщению
Exponat пишет:
влияет ли такие манипуляции на поисковые системы?

Поисковики не любят дубли. Делайте 301 редирект. И если таких страниц много, то лучше это делать не в .htaccess.
3. Exponat - 23 Августа, 2013 - 11:04:25 - перейти к сообщению
А редирект 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. ?>

Так?
4. LifePlay - 23 Августа, 2013 - 11:12:53 - перейти к сообщению
Перенаправляешь любой запрос в 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'], это называется фронт контролер.
5. armancho7777777 - 23 Августа, 2013 - 11:14:27 - перейти к сообщению
Exponat, 2 варианта.
В обоих случаях ссылки уже должны быть такого вида:
Exponat пишет:
http://domain.com/news


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


... или же перенаправляются все вызовы в index.php с помощью того же .htaccess и там уже (в index.php)
разбираете $_SERVER['REQUEST_URI'].
6. Exponat - 23 Августа, 2013 - 11:31:53 - перейти к сообщению
Ого....на сколько я понял весь этот процесс называется ЧПУ-ссылки. И он не просто. Нужно много почитать и посмотреть примеров. Это не делается за 20 минут... Я новичок. Спасибо что направили на верный путь Улыбка
7. Exponat - 27 Августа, 2013 - 10:52:34 - перейти к сообщению
Продолжая эту тему я выяснил что сначала нужно 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]


Имею ввиду чтоб не писать каждое правило для конкретной страницы. Цыфр там нет, просто буквы.

 

Powered by ExBB FM 1.0 RC1