Сохранить строку запроса при перезаписи .htaccess

#php #apache #.htaccess #mod-rewrite

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

Вопрос:

В настоящее время у меня есть простая перезапись, которая перенаправляет

 /photos/2
  

Для

 /photoviewer.php?photo=2
  

Однако мне нужно иметь возможность разрешить пользователю добавлять фотографию в свою корзину, поэтому я подумал, что мне нужно сохранить строку запроса, чтобы сработало следующее.

 /photos/2?action=purchase
  

перенаправляет на:

 /photoviewer.php?photo=2amp;action=purcahse
  

Мое текущее правило htaccess:

 RewriteRule ^photos/([a-zA-Z0-9_-] )$ photoviewer.php?photo=$1 [L]
  

Ответ №1:

Добавьте [QSA] флаг (добавление строки запроса).

 RewriteRule ^photos/([a-zA-Z0-9_-] )$ photoviewer.php?photo=$1 [L,QSA]
  

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

1. Спасибо за удивительно быстрый ответ! Я соглашусь, когда мне позволит таймер.

Ответ №2:

В вашем правиле замените [L] на [L,QSA] .
Это позволит сохранить информацию о запросе.

Надеюсь, это поможет!

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

1. где L означает последнее, т. е. Если правило соответствует, не смотрите на другие правила.

Ответ №3:

[QSA,L] вместо просто [L] должно сработать. Надеюсь, это поможет!

Ответ №4:

Как насчет того, чтобы просто расширить идею передачи «любых» пар имя / значение через URL в photoviewer.php скрипт? Это элегантный подход, который я использовал в прошлом.

 RewriteRule  ^photos/([^/.-] )/([^/.-] )$    /photoviewer.php?$1=$2    [L]
RewriteRule  ^photos/([^/.-] )/([^/.-] )/([^/.-] )/([^/.-] )$    /photoviewer.php?$1=$2amp;$3=$4    [L]
RewriteRule  ^photos/([^/.-] )/([^/.-] )/([^/.-] )/([^/.-] )/([^/.-] )/([^/.-] )$    /photoviewer.php?$1=$2amp;$3=$4amp;$5=$6    [L]
  

Итак, что-то вроде:

 photos/photo/2/action/purchase
  

перезаписывает в:

 photoviewer.php?photo=2amp;action=purchase