mod_rewrite поможет передать полный путь со строкой запроса - PullRequest
3 голосов
/ 01 мая 2009

Я выполняю некоторое кэширование на основе всего URL, включая строку запроса, и мне нужно, чтобы Apache распознал файл и использовал его. Кажется, что найдено совпадение, но затем удаляет строку запроса перед рендерингом файла.

URL: www.somesite.com/default.asp?foo=bar

Кэшированное имя файла страницы в файловой системе в папке кеша: default.asp? Foo = bar

Моя текущая попытка переписать:

RewriteCond /site_root/cache/%{REQUEST_FILENAME}?%{QUERY_STRING} -f
RewriteRule ^.*$ /site_root/cache/%{REQUEST_FILENAME}?%{QUERY_STRING} [L,QSA]

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

Возможно, вы захотите попробовать что-то вроде этого:

RewriteRule ^(.+)$ /site_root/cache/$1 [L,QSA]

Это должно переписать "default.asp" в URL к тому, что я думаю вы пытаетесь использовать. QSA должен привести к добавлению исходной строки запроса к переписанному URL.

Я не уверен на 100%, что это то, что вы ищете, поэтому, если это не так, дайте мне знать, и я постараюсь помочь.

1 голос
/ 01 мая 2009

Я нашел решение, которое работает для моих нужд.

Кажется, что Apache действительно хочет вытянуть строку запроса в набор параметров, что является нормальным.

Для того, чтобы перенести один на Apache, я только что заменил? в строке с |. Как только я это сделал, он больше не видел строку как строку запроса. Так как параметры не имеют значения в моем случае, он работает нормально. Все, что мне нужно сделать, это убедиться, что я записал имя файла с каналом вместо знака вопроса. Достаточно просто.

Не стесняйтесь комментировать, если у вас есть лучшее решение.

Вот правило, которое делает это для меня. Так как Apache не распознает результат как MIME, который он знает, я заставляю его text / html.

RewriteRule ^(.+)$ /site_root/cache/%{HTTP_HOST}$1|%{QUERY_STRING} [L,T=text/html]
...