чайниковский вопрос про использование mod_rewrite

DO
На сайте с 01.09.2005
Offline
120
739

Для поисковой оптимизации есть известная рекомендация использовать mod_rewrite для замены URL страниц сайта вида /page.cgi?param=value на /page/value.

Вопрос:

Как быть с существующими скриптами, которые формируют URL сыслок на страницы сайта? Можно обойтись без переписывания скриптов?

P.S.:

Статьи по теме прочитал (/ru/news/160 и /ru/news/355). Там примеры только для PHP, а у меня Perl. Все ссылки имеют вид /cgi-bin/path/my_script.pl?param1=val1&param2=val2

Коля Дубр
На сайте с 02.03.2005
Offline
153
#1

Все зависит от того, как у Вас формируются УРЛ, насколько единообразно. Если код написан аккуратно, одним человеком, и его не очень много - возможно, что удастся переписать скрипты в автоматическом режиме, на регулярных выражениях, только это надо делать очень аккуратно и забэкапевшись.

Но переписывать код точно придется.

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
DO
На сайте с 01.09.2005
Offline
120
#2

Хорошим решением будет такое?

Разделять пары параметр=значение не "&", а "/", и вместо "=" использовать "%20". С такими символами проблем не будет?

DO
На сайте с 01.09.2005
Offline
120
#3

Продолжение вопроса.

Допустим, я прописал в .htaccess:

ErrorDocument 404 /cgi-bin/scripts/handler.pl

В этом скрипте я разбирал бы URL вида ".../cgi-bin/scripts/script/param1-val1/param2-val2" и формировал бы из этого строки вида ".../cgi-bin/scripts/script.pl?param1=val1&param2=val2".

Как мне из handler.pl вызвать script.pl с такой строкой параметров так, чтобы:

1) не менять обработку параметров в script.pl,

2) чтобы клиенту (и пользователю браузера, и поисковому роботу) был виден только вызываемый им URL вида ".../cgi-bin/scripts/script/param1-val1/param2-val2", а не реальный вызываемый script.pl со всеми параметрами после "?".

Как делается такой невидимый редирект?

Коля Дубр
На сайте с 02.03.2005
Offline
153
#4

Такой невидимый редирект - и есть mod_rewrite, а решение через 404 - это неправильно. Mod_rewrite переписывает УРЛ на уровне сервера по образцу, заданному в .htaccess регулярным выражением. Простой пример:

RewriteEngine on

RewriteBase /

RewriteRule ^rub([0-9]*)[\/]?$ index.php?rub=$1

такой .htaccess, получив запрос на root.com/rub33/, обработает его, и отдаст клиенту документ root.com/index.php?rub=33 - при этом клиент ничего не заметит, в адресной строке останется root.com/rub33/.

За подробностями - сюда: http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html

MK
На сайте с 18.08.2005
Offline
126
#5

Лучше конечно так:

Такой невидимый редирект - и есть mod_rewrite

но и через 404 тоже можно - в скрипте разбить ".../cgi-bin/scripts/script/param1-val1/param2-val2" по "/" на массив, проверить каждый элемент на вхождение "-", если да, то разложить на две переменных и создать переменную с названием param2 котрая равна val2.

нет
DO
На сайте с 01.09.2005
Offline
120
#6
Marat_Kh:
но и через 404 тоже можно - в скрипте разбить ".../cgi-bin/scripts/script/param1-val1/param2-val2" по "/" на массив, проверить каждый элемент на вхождение "-", если да, то разложить на две переменных и создать переменную с названием param2 котрая равна val2.

Наверное, это будет лучшим решением, если параметров несколько (больше двух) и некоторые из них необязательные. Так?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий