В Apache, как мне перенаправить с определенного пути и строки запроса? - PullRequest
0 голосов
/ 11 февраля 2012

Я хочу перенаправить, например,

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 для обработки перенаправлений .... Я на расстоянии нескольких символов от решения?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Я так и не понял проблему, но решил ее, изменив порядок директив и ничего больше.Я переместил новые перенаправления сразу после директивы RewriteBase, и все работает отлично.

0 голосов
/ 11 февраля 2012

Ресурсы (таблицы стилей, изображения и т. Д.) Не загружаются, поскольку могут существовать относительные пути, которые стали недействительными.

Проблема в том, что браузер считает "категории" папкой, и поэтомуНедопустимый путь к ресурсам.

Быстрое решение (если вы работаете в домене / поддомене, а не в папке) - это ввести / в путь всех ваших ресурсов.

Например: измените style.css на /style.css, чтобы он по-прежнему включался, когда вы находитесь на странице категорий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...