конфликт mod_rewrite с другими переменными $ _GET - PullRequest
1 голос
/ 22 августа 2011

Я использую mod_rewrite, чтобы сделать мои URL чистыми.При этом:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9]+)$ index.php?page=$1&sub=$2&id=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9]+)/$ index.php?page=$1&sub=$2&id=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2&action=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2&action=$3

Это все изменит красиво, например: website.com/index.php?page=user&sub=profile на website.com/user/profile/.

Но что, если есть другие переменные $_GET ПОСЛЕ профиля.Так, например, если пользователь вызывает: website.com/user/profile/?do=that&go=ahead

Когда я пытаюсь напечатать $_GET['do'] и $_GET['go'], они возвращаются пустыми.

Есть идеи?

Также приветствуются предложения по сокращению кода mod_rewrite:)

1 Ответ

2 голосов
/ 22 августа 2011

В этом случае вам необходимо добавить флаг QSA .Кроме того, я бы сказал, что все ваши 6 правил в основном делают то же самое.Вы можете добавить дополнительные разделы к своим регулярным выражениям с помощью оператора ?.Например, эти строки:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2

... могут быть объединены как:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?page=$1&sub=$2 [QSA]
...