Вопрос по url-rewriting, get, query-string, php – Переписывающий URL, содержащий вопросительный знак

1

У меня проблема с перезаписью URL. Я использую модификацию Apache для перезаписи URL. Например, я переписываю URL

www.website.com/some/path/ to request.php?string=some/path/.

Затем я показываю конкретный ответ для этого URL. Прямо сейчас мое правило переписывания выглядит так:

<code>RewriteRule ^([a-z_/\?]+)$ request.php?string=$1
</code>

Но проблема начинается, если у меня есть URLwww.website.com/some/data/?id=12&name=John и переписать это, я получаю что-то вроде этого:request.php?string=some/data/?id=12&name=John, Кажется, что в этом примере другой знак вопроса сбивает с толку PHP. Если я попытаюсь получить$_GET['string'] в request.php все, что я получаю, это:some/data/.

Для дальнейшего использования Gmail делает нечто похожее с URL-адресом:
https://mail.google.com/mail/?ui=1&shva=1

Вы пробовали[QSA] флаг еще? mario

Ваш Ответ

1   ответ
5

Флаг QSA (Query String Append), Кроме того, я бы вынул знак вопроса из класса символов в регулярном выражении:

RewriteRule ^([a-z_/]+)$ request.php?string=$1 [L,QSA]
Спасибо вам и Марио за отличный ответ. Это работает даже лучше, чем я ожидал, так как мне нужно разобраться с запросом запроса самостоятельно. Žan Kusterle
@knustrle: Нет, ты не обязан, Apache сделает это за тебя. Это также задокументировано в переписываемых документах. Если вы хотите проверить наличие запросов-info-parts, вам нужно использовать RewriteCond. RewriteRule - это только путь.

Похожие вопросы