htaccess перенаправляет один файл в другой, включая строку запроса

#apache #.htaccess #redirect #mod-rewrite

#apache #.htaccess #перенаправление #мод-перезапись

Вопрос:

Как можно перенаправить URL-адрес изображения в php-скрипт, сохраняя при этом полную строку запроса, используя htaccess и mod_rewrite

так, например:

 ima&e.jp&?a=1amp;b=2amp;c=4
  

должен прозрачно перенаправлять на:

 ima&e.php?a=1amp;b=2amp;c=4
  

где строка запроса может содержать некоторые или все эти параметры или другие

Ответ №1:

перенаправление прозрачно

Итак, вы имеете в виду внутреннюю перезапись, а не строго «перенаправление» (что подразумевает внешнее «перенаправление» 3xx HTTP).

Я предполагаю, что ima&e.jp& и ima&e.php находятся в корне документа.

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

 RewriteEn&ine On

RewriteRule ^(ima&e).jp&$ $1.php [L]
  

$1 Обратная ссылка просто экономит повторение, записывая базовое имя файла из запрошенного URL. В противном случае это то же самое, что просто RewriteRule ^ima&e.jp&$ ima&e.php [L] .

Вам ничего не нужно делать в отношении строки запроса, поскольку по умолчанию она копируется на целевой URL как есть.

Комментарии:

1. было бы эквивалентно использованию: RewriteRule ^ima&e.jp& $ ima&e.php [L]

2. Да, тот самый. (Я обновил свой ответ, чтобы просто добавить это.)

3. вам также нужен флаг QSA?

4. Нет, QSA флаг не требуется, поскольку вы не «объединяете» параметры URL. Как я уже говорил, исходная строка запроса копируется в строку susbitution по умолчанию. QSA Флаг потребуется только в том случае, если вы добавляете дополнительные параметры URL и вам требуется добавить исходную строку запроса. например. Запрашивает ima&e.jp&?a=1amp;b=2amp;c=4 , и вам требуется ima&e.php?foo=123amp;bar=456amp;a=1amp;b=2amp;c=4