Условное правило перезаписи Htaccess - PullRequest
1 голос
/ 10 июля 2011

Я полный нуб, когда дело доходит до файла .htaccess ... Я пытаюсь проверить, существует ли переменная GET, ?si=10, и передать ее на перезапись, но только еслиэто существует.

RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1

Таким образом, когда я говорю website.com/user/Username/, на сервере вместо этого идет website.com/profile/?name=Username.Но когда я добавляю do website.com/user/Account/?si=10, сервер не передает переменную si на фактически загруженную страницу.Есть идеи, как бы я это сделал?Извините, если я сформулировал это плохо ..

Ответы [ 2 ]

4 голосов
/ 10 июля 2011

Попробуйте флаг QSA

 RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1 [QSA]

Из руководства ...

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

1 голос
/ 10 июля 2011

Вы можете сделать это так:

RewriteCond %{QUERY_STRING} ^si=([0-9]+)$ // replace regex as neccesary
RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1&si=%1

Знак процента в процентах соответствует совпадению или совпадениям из rewriteCond (s), и вы используете знак доллара как обычно для совпадений из rewriteRule. Это дает вам полный контроль над вашими запросами, но да, QSA проще.

...