.htaccess и SEO дружественная строка поискового запроса - PullRequest
1 голос
/ 24 ноября 2011

Я действительно новичок в .htaccess. Мне было интересно, как создать сложные SEO дружественные URL для строки поиска и выбранных фильтров.

Я использую следующий код для поиска.

ReWriteRule ^search/(.*)/(.*)   ?module=search&q=$1&page=$2 [L]
ReWriteRule ^search/(.*)        ?module=search&q=$1 [L]

Когда дело доходит до добавления параметров фильтра, это становится кошмаром. Рассмотрим следующие фильтры:

Сокращение от: нет, имя, дата + ASC, DESC. Категория: нет, идентификатор категории. Поиск в: Все, Заголовок, Сообщение, Автор.

Когда все фильтры выбраны, наш адрес будет;

Сырье: www.site.com/?module=search&q=test&shortBy=name_ASC&catID=1&searchIn=title

Seo Friendly: www.site.com/search/test/name_ASC/1/title/

Теперь это совсем не сложно, но я просто хочу понять, как все работает. Нужно ли применять все фильтры к URL, даже если они не выбраны? Это создаст более длинные URL-адреса без причины, поэтому я считаю, что должен быть другой подход к этому.

Как определить правило в .htaccess? Как и в моем примере, я пишу по крайней мере 2 правила в моем файле .htaccess (2-е для нумерации страниц).

Все, что я мог сейчас подумать, сделать что-то вроде этого ^search/(.*)/(.*) ?module=search&$1=$2 [L], но это не выглядит элегантно.

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

1 Ответ

4 голосов
/ 24 ноября 2011

Поместите приведенные ниже правила вверху вашего файла .htaccess (в корневой каталог вашего сайта), а затем выберите один из вариантов ниже, измените его в соответствии со своими потребностями и добавьте после в свой файл .htaccess.

Первый вариант будет соответствовать большинству URL-адресов и не рекомендуется. Второй будет соответствовать URL-адресам только с 5 каталогами, но требует всех параметров, поэтому я рекомендую третий.

Хотя приведенный ниже шаблон может не выглядеть элегантно, это рекомендуемое решение в Подробное руководство по Apache mod_rewrite

Для более подробной информации смотрите apache docs или некоторые примеры или эту запись

Во всех случаях я предполагаю, что запросы поступают в index.php, поэтому вы должны изменить его, чтобы он соответствовал фактической странице.

Этот раздел должен идти в начале файла .htaccess для всех 3 опций

#for all 3 options these 2 lines should be at the top of the .htaccess file
RewriteEngine On
RewriteBase /

Option1

#1 if all parameters are optional, and you page (index.php) can handle blank parameters use
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/$ index.php?module=$1&q=$2&shortBy=$3&catID=$4&searchIn=$5 [L]

Option2

#2 if all parameters are required use
RewriteRule ^([^/]+)/([^/]+)/([^/]+)?([^/]+)/([^/]+)/$ index.php?module=$1&q=$2&shortBy=$3&catID=$4&searchIn=$5 [L]

Вариант3

#3 if the module is required and other parameters are optional, then this is better
RewriteCond %{REQUEST_URI} ^/(search|produce_detail|other_modules_here)/
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/$ index.php?module=%1&q=$1&shortBy=$2&catID=$3&searchIn=$4 [L]
...