Переменные $_GET исчезают, когда mod_rewrite перезаписывает .html в .php

Я использую mod_rewrite для перезаписи .html в .php.

RewriteRule ^([0-9a-zA-Z-_]+)\.html$ index.php?p=$1 [L]

Но у меня возникают проблемы при использовании $_GET в URL-адресе. Он отлично работает, если запрошенный URL-адрес имеет следующий формат: index.php?a=f1

НО, если он перепишет его на home.html?a=f1, НИЧЕГО.

Предполагая, что браузер просто перестает читать после того, как попадает в .html. Есть ли способ заставить это работать?


person Rick    schedule 27.06.2012    source источник


Ответы (2)


Вам нужно добавить флаг QSA:

RewriteRule ^([0-9a-zA-Z-_]+)\.html$ index.php?p=$1 [QSA,L]

Причина лучше всего объясняется в документации:

Когда замещающий URI содержит строку запроса, RewriteRule по умолчанию отбрасывает существующую строку запроса и заменяет ее вновь созданной. Использование флага [QSA] приводит к объединению строк запроса.

person Salman A    schedule 27.06.2012
comment
Это дает внутреннюю ошибку сервера. - person Rick; 28.06.2012
comment
Я удалил флаг L, и он работает. Если я оставлю это как [QSA, L], это даст внутреннюю ошибку сервера. - person Rick; 28.06.2012
comment
Внутри флагов не должно быть пробелов. [QSA, L] плохо, [QSA,L] хорошо. - person Salman A; 28.06.2012

вам нужно позвонить home.htm&a=f1

скрытый URL: index.php?p=home&a=f1

person David    schedule 27.06.2012