Перенаправить динамические URL-адреса, включая строку запроса, с помощью htaccess.

Мне нужно перенаправить некоторые URL-адреса со старой версии веб-сайта на новые URL-адреса. Я не обнаружил проблем с простыми URL-адресами, но я не могу заставить работать URL-адреса со строками запросов:

Redirect 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink

Он просто возвращает 404, не найдено.

Я также пытался использовать маршрут на Silex (микрофреймворк PHP, который я использую), но это тоже не сработало:

$app->get('/product_detail.php?id={id}', function($id) use ($app) {

    $prodotto = Product::getPermalink($id);

    return $app->redirect($app['url_generator']->generate('product',array('permalink'=>$prodotto)));
});

Есть ли способ с некоторым правилом htaccess, чтобы строка запроса рассматривалась как часть URL-адреса и позволяла правильно перенаправлять ее?

Спасибо.


person Ingro    schedule 19.03.2013    source источник


Ответы (1)


Перенаправление 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink

Redirect — это директива mod_alias, не подходящая для манипулирования строками запроса:

mod_alias предназначен для решения простых задач по обработке URL-адресов. Для более сложных задач, таких как манипулирование строкой запроса, используйте инструменты, предоставляемые mod_rewrite.

Извлечено из документов Apache mod_alias

Таким образом, следует использовать mod_rewrite. Тот же пример в одном файле .htaccess в корневом каталоге будет выглядеть примерно так:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/product_detail\.php  [NC]
RewriteCond %{REQUEST_URI} !/product/permalink    [NC]
RewriteRule .*   /product/permalink       [R=301,NC,L]

Он перенаправляет

http://www.mysite.com/product_detail.php?id=1

To:

http://www.mysite.com/product/permalink?id=1

Запрос был автоматически добавлен к URL-адресу подстановки.

Для внутреннего сопоставления замените [R=301,NC,L] на [NC,L]

person Felipe Alameda A    schedule 20.03.2013
comment
Спасибо за ваш проницательный ответ! В любом случае, я решил решить свою проблему с помощью перенаправления на уровне PHP, чтобы мой файл .htaccess превратился в нечитаемую стену текста, так как у меня есть несколько сотен страниц продукта для перенаправления. - person Ingro; 20.03.2013