Условия перезаписи IIRF/APACHE не выполняются со строкой запроса

У меня есть система CMS, которая преобразует некрасивые URL-адреса в более удобные.

До сих пор вместо URL-адреса страницы было что-то вроде этого:

/pagebase.php?id=3644

У меня есть настройка записи URL для каждой страницы, чтобы сделать ее более удобной.

Например:

RewriteRule ^/events$   /pagebase.php?id=3644 [I]

Так что, когда пользователь вводит domain.com/events, он появляется над URL-адресом.

Это работает почти для всех страниц, кроме этой, где мне нужно добавить дополнительные строки запроса, чтобы я мог сделать что-то подобное.

www.domain.com/events?y=2010=&m=&1d=2

Это было бы переписано как

www.domain.com/pagebase.php?id=3366&y=2010=&m=&1d=2. 

Единственная проблема заключается в том, что сопоставление записи URL-адреса не удается, потому что он не видит ?y=2010=&m=&1d=2 как строку запроса, он видит его как часть URL-адреса и терпит неудачу.

Мне нужно изменить файл перезаписи, чтобы разрешить передачу строк запроса.

Я хочу сделать что-то вроде RewriteRule ^/events-%QUERYSTRING% $ /pagebase.php?id=3644 + %QUERYSTRING% [I]

Где он удаляет строку запроса из совпадения, но затем добавляет ее в конец написанного URL-адреса. У меня просто недостаточно знаний о том, как работает переписывание URL-адресов, чтобы сделать это.

Вот пример моего файла перезаписи.

RewriteRule ^/events$   /pagebase.php?id=3644
RewriteRule ^/faqs$   /pagebase.php?id=3659
RewriteRule ^/gallery$   /pagebase.php?id=3645
RewriteRule ^/gifts$   /pagebase.php?id=3646

Мне нужно что-то, что будет работать на всех страницах, я не хочу изменять каждое правило для обработки определенных строк запроса, мне просто нужны общие решения, которые будут передавать строки запроса.


person TroySteven    schedule 10.01.2013    source источник
comment
Добавьте [L,QSA] к операторам RewriteRule. L означает «Последний» (не продолжать переписывать), а QSA — «Добавить строку запроса», чтобы добавить параметры к вашему URL-адресу.   -  person Bjørne Malmanger    schedule 11.01.2013
comment
Это не сработало. Как бы это выглядело? Как это RewriteRule ^/events$ /pagebase.php?id=3644 [L, QSA]   -  person TroySteven    schedule 11.01.2013
comment
Я вижу, что может возникнуть проблема с объединением строки запроса с QSA. Я думаю, что это поможет: RewriteRule ^/events$ /pagebase.php?id=3644&%{QUERY_STRING} [L]   -  person Bjørne Malmanger    schedule 13.01.2013


Ответы (1)


Вы можете попробовать сопоставить необязательную строку запроса и добавить к ней модификатор [QSA]:

RewriteRule ^/events(\?.*)?$   /pagebase.php?id=3644 [QSA,L]
RewriteRule ^/faqs(\?.*)?$     /pagebase.php?id=3659 [QSA,L]
RewriteRule ^/gallery(\?.*)?$  /pagebase.php?id=3645 [QSA,L]
RewriteRule ^/gifts(\?.*)?$    /pagebase.php?id=3646 [QSA,L]
person marapet    schedule 13.01.2013