Мод Переписать: Обработка двух переменных Get - PullRequest
0 голосов
/ 18 мая 2010

Как я могу отредактировать это переписывание URL-адреса, чтобы добавить еще одну переменную get, добавляемую к URL-адресу? Я пробовал несколько попыток, но всегда получаю 500 внутренних ошибок сервера!

Я добавил комментарии, чтобы показать, чего я пытаюсь достичь.

# /view.php?user=h5k6&page=1 externally to /h5k6/1
# Some times the page get variable will not exist so it should just show /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*user=([^&]+)&?.*$
RewriteRule ^view\.php$ /%2? [L,R=301]

# /h5k6/1 internally to /view.php?t=h5k6&page=1
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L]

Спасибо всем за помощь

1 Ответ

1 голос
/ 19 мая 2010

Проблема с аргументами запроса URI заключается в том, что они могут появляться в любом порядке. С двумя аргументами у вас есть только две перестановки ( A до B и B до A ). Но чем больше аргументов вы хотите извлечь, тем больше у вас перестановок ( n ! ).

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

RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)(page=[^&]+)&?([^&].*)?$
RewriteCond %3&%1%4 ^(([^&]*&)*)(user=[^&]+)&?([^&].*)?$
RewriteCond %3&%1%4 ^user=([^&]+)&page=([^&]+)&?([^&].*)?$
RewriteRule ^view\.php$ /%1/%2?%3 [L,R=301]

Первое условие проверяет строку запроса, как в вашем правиле. Второе условие выбирает аргумент page и помещает его в начало строки запроса. Третье условие делает то же самое с аргументом user , так что порядок всегда такой: первый user , второй page . Затем мы используем четвертое условие, чтобы одновременно принимать оба значения аргумента, чтобы использовать их в замене RewriteRule. Остальная часть запроса добавляется к замещающему URI (см. %3), но вы можете оставить это, если хотите.

Как видите, чем больше аргументов вы хотите извлечь, тем сложнее это становится. И это проще сделать с помощью языка, более мощного, чем mod_rewrite, например PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...