Я хочу перенаправить, например,
http://mystore.com/category.php?id=123
до
http://mystore.com/categories/foo
, а также, например,
http://mystore.com/product.php?id=456
до
http://mystore.com/products/bar
Это будут постоянные (301) перенаправления, и их будет около дюжины. Мне не нужно извлекать какую-либо информацию из путей или строк запроса, мне просто нужно точно их сопоставить. И я хотел бы избежать указания абсолютных URL, если это вообще возможно.
Я полагаю, что это можно сделать с помощью mod_rewrite
и некоторой комбинации RewriteCond
s и RewriteRule
s, но я уже переписываю некоторые URL, и мои попытки до сих пор приводили к нежелательным результатам.
Вот анонимная выдержка из моего .htaccess
файла до любых изменений:
RewriteBase /
RewriteRule sitemap.xml index.php?route=sitemap [L]
# skip files and directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?route=$1 [L,QSA]
Это работает как задумано. Я пытался добавить несколько различных комбинаций условий и правил непосредственно перед последней строкой, совсем недавно
RewriteCond %{QUERY_STRING} id=123
RewriteRule category.php categories/foo [L,R=301]
Что-то в этом последнем правиле вызывает проблемы. Домашняя страница загружается, а таблицы стилей, изображения и другие ресурсы - нет.
На данный момент я рассматриваю возможность создания сценариев PHP с именами category.php
и product.php
для обработки перенаправлений .... Я на расстоянии нескольких символов от решения?