Как использовать mod_rewrite для удаления строки запроса в CMS - PullRequest
1 голос
/ 29 сентября 2011

Я использую CMS, которая отправляет все запросы в файл index.php с использованием следующего RewriteRule

RewriteRule .* index.php [L]         

Однако в разделе новостей сайта CMS генерирует ссылки на новости, подобные этим: /news?month=201106

Я хочу, чтобы мои новостные ссылки были такими: /news/month/201106, и я достигну этого с помощью PHP-кода.

Я знаю, как добиться переписывания с помощью Apache, если это не такдля этого я бы использовал что-то вроде этого:

RewriteRule ^news/month/(.+)$ news?month=$1 

Однако моя проблема в том, что CMS перехватывает вызовы и пытается найти / news / month / 201106, который не может, и выбрасывает уровень CMS 404

Я прочитал о создании исключений, но я не могу понять, как получить:

  1. Apache, чтобы перехватить переписать, прежде чем он будет отправлен на перехват всех
  2. CMS для последующей обработки переписанного URL-адреса в обычном режиме (т. Е. Для получения новостей? Month = 201106 и обработки в обычном режиме)

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

1 Ответ

1 голос
/ 26 октября 2011

1) Apache для перезаписи перед отправкой на перехват всех

Вы можете сделать это, добавив RewriteCond перед вашим RewriteRule .* index.php [L], чтобы он выглядел примерно так:

RewriteCond %{REQUEST_URI} !^/news
RewriteRule .* index.php [L]

2) CMS затем обрабатывает переписанный URL-адрес как обычно (т. Е. Получает новости? Month = 201106 и обрабатывает их как обычно)

Второе правило, которое вы имели, RewriteRule ^news/month/(.+)$ news?month=$1 должно позаботиться об этом.

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