Если я правильно прочитал ваш вопрос, вы хотите:
http://server/path/app.json?a=foo&b=bar
Собирается:
http://server/path/foo.php?a=foo&b=bar
Когда вы захватываете (app).json
$1
- это app
, а $2
- это ваша вторая скобка, это ... ничего (часть между json
и ?
). Поскольку все после знака вопроса является QUERY STRING и не может быть захвачено здесь. Ваш rewriteRule работает с запрошенным файлом, а не с QUERY STRING . Таким образом, вы нигде не захватили foo
. Для QUERY_STRING вы можете использовать флаг [QSA]
в rewriteRule, который просто добавит a=foo&b=bar
после перезаписи.
RewriteEngine On
RewriteRule ^([^.?]+).json(.*)$ $1.php$2 [L]
Здесь вы указываете apache повторно использовать $1
(имя файла без .json), поэтому app.json
будет перенаправлено на app.php
, а не foo.php
.
RewriteEngine On
RewriteRule ^([^.?]+).json(.*)$ $1.php [L,QSA]
Перенаправит app.json?a=b&z=r
на app.php?a=b&z=r
.
Теперь, если вам действительно нужно записать foo
в качестве первого параметра QUERY_STRING, правило станет более жестким. Но вы могли бы сделать это так (здесь вместо первого параметра я определяю параметр 'a =' и фиксирую его значение в % 4 ):
RewriteCond %{QUERY_STRING} (.*)(^|&|%26|%20)a(=|%3D)([^&]+)(.*)$
RewriteRule ^([^.?]+).json$ %4.php? [L,QSA]