2009-10-29 2 views
1

Я новичок в mod_rewrite и мне нужно что-то сделать для своего клиента.Как перенаправить старые «уродливые» URL-адреса на seo-friendly?

Предположим, у меня есть www.mydomain.com/products.php?prod_id=32.

Этот продукт имеет раздел (одежда) и имя (рубашка). Эти имена и разделы уникальны.

В SEO-Friendly Url это должно быть www.mydomain.com/products/clothes/shirt/.

Я знаю, что могу создать

RewriteRule ^products/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ products.php?section=$1&name=$2 

Я могу сделать это, и это работает. Но я хочу, чтобы люди, которые вошли на сайт www.mydomain.com/products.php?prod_id=32, перенаправлялись на сайт www.mydomain.com/products/clothes/shirt/ (измененный в самом браузере). Как я могу это сделать, не вставляя идентификатор в свой url? Можно ли вызвать «предварительную обработку» php-файла в моем .htaccess и воссоздать «products.php? Section = $ 1 & name = $ 2»?

У кого-нибудь есть хорошая ссылка с действительно подробным объяснением mod_rewrite?

Спасибо!

ответ

4

У вас может быть больше проблем, чем mod_rewrite может обрабатывать изящно. Вы также можете использовать PHP для перенаправления на браузер. Таким образом, вы можете получить доступ к своей базе данных, чтобы выяснить, что product_id 32 is/clothes/shirts/

+0

Я думаю, что я понял ваше решение: создайте регулярное выражение, соответствующее «products.php? Prod_id = 32», которое перенаправляется, например, на «fix_old_url.php? Prod_id = 32». Внутри fix_old_url.php я извлекаю «одежду» и «рубашки» из запроса, используя этот идентификатор. После этого я перенаправляюсь на/одежду/рубашки/на php. Есть ли разница с точки зрения SEO в использовании перенаправления PHP вместо перенаправления apache? –

+0

Браузер (или поисковый робот) увидит одно и то же из перенаправления. Вы не можете сказать извне сервера, как вы его реализовали. –

+0

Я тоже пытаюсь понять поток ... предположим, что это пользователь. браузер -> products.php? prod_id = 32 -> apache -> fix_old_url.php -> браузер -> apache ->/products/clothes/shirt/-> products.php? prod_id = 32. Правильно ли это? –

3

Я не вижу другого выбора, кроме как делать это внутри PHP.

Вы можете добавить что-то вверху страницы products.php, которая проверяет URL-адрес ($_SERVER['REQUEST_URI']), чтобы узнать, содержит ли он products.php. Если это так, перенаправите человека. Вам нужно будет запросить вашу базу данных, чтобы узнать категорию продукта и имя перед перенаправлением.

Не забудьте установить Переехал Постоянно заголовок для дальнейшего улучшения SEO :)

+0

Спасибо за ввод. Я хотел бы избежать вставки логики перенаправления в свои php-файлы, я думаю, подход Ned Batchelder лучше. Благодаря! –

0

Эти данные могут быть переданы с помощью браузера через поле заголовка «Referer». Вы могли бы продвинуть этот URL-адрес и посмотреть на аргументы get. Если я правильно помню, это не поддерживается во всех браузерах.

+0

Почему заголовок рефери должен содержать эту информацию? – phidah

-2

Apache? Попробуйте перенаправить .htaccess. Нет необходимости в mod_rewrite.

Пример: Redirect 301 /oldpage.html http://www.example.com/newpage.html

+0

Как насчет параметров? – phidah

+0

Мех. Я дам вам -1 для использования смайлика. – inked

+0

.htaccess занимает больше ресурсов процессора и медленнее, чем настройка на стороне сервера mod_rewrite. – Murvinlai

0

в верхней части products.php (или любой другой страницы, которую вы хотите перенаправить) вы могли бы поставить вызов функции

redirectToSeoUrl(); 

Тогда в одном ваших включенных файлов пишите функцию redirectToSeoUrl, которая получает новый url и перенаправляет. Обязательно поместите код, прежде чем что-либо будет выводиться в браузер.