Назад | Перейти на главную страницу

$ _GET переменные пустые .htaccess перезаписать

Учитывая URL

https://example.com/api/test/512/31

Хочу переписать на:

https://example.com/api/test.php?param1=512&param2=31

Я пробовал:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1&param2=$2 [QSA,L]

Перезапись работает, но $1 и $2 пусты. Есть идеи, почему?

RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1&param2=$2 [QSA,L]

Как вы думаете $1 и $2 получить набор? Вы не создали ни одной группы захвата в RewriteRule шаблон (который является отрицательным шаблоном, поэтому в любом случае не может ничего "сопоставить"), поэтому $1 и $2 обратные ссылки действительно всегда будет пустым.

Поскольку вы используете URL-адреса без расширений, которые сопоставляются непосредственно с файлами, вам также необходимо убедиться, что MultiViews отключен (если это еще не сделано). Если MultiViews включен, вы получите тот же результат - без параметров URL - поскольку mod_negotiation выдал бы внутренний подзапрос для файла перед mod_rewrite.

ОБНОВИТЬ:

Критерии (из комментариев):

  • Ваш .htaccess файл находится в /api подкаталог.
  • /api/<something> всегда сопоставляется с /api/<something>.php. <something> может состоять из произвольного количества сегментов пути, например. different/anothersubfolder/filename.
  • В /512/31 сегменты пути в конце URL-адреса могут состоять из цифр и букв. Всегда есть два отрезка пути, т.е. /#1/#2.

Вместо этого попробуйте следующее:

Options -MultiViews

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/api/$1.php -f
RewriteRule ^(.+)/(\w+)/(\w+)$ $1.php?param1=$2&param2=$3 [QSA,L]

Сокращенный класс символов \w Спички a-z, A-Z, 0-9 и _ (нижнее подчеркивание). Итак, это касается «цифр и букв».