Как добавить дополнительные переменные URL в URL, уже переписанный с помощью mod_rewrite - PullRequest
6 голосов
/ 04 сентября 2011

Кто-нибудь знает, можно ли добавить дополнительные переменные в URL-адрес, который вы используете mod_rewrite, чтобы разделить на переменные.

Например, если у меня есть URL-адрес:

website.com/post/53/post-title/

, и я использую mod_rewrite, чтобы превратить его в:

website.com/post.php?postid=53

Существует ли элегантный способ поместить дополнительные переменные в «предварительно переписанный» URL и сохранить их для моего сценария post.php?

IE, что если я создаю ссылку, подобную следующей:

website.com/post/53/post-title/?anothervar=6

Пока что похоже, что мой код mod_rewrite просто выбрасывает дополнительную переменную и отправляет URL-адрес post.php скрипт, подобный следующему:

website.com/post.php?postid=53

Я знаю, что могу использовать $_SERVER['REQUEST_URI'], чтобы получить исходный URL-адрес в моем php-скрипте (AKA website.com/post/53/post-title/?anothervar=6), прежде чем он будет переписан mod_rewrite, а затем просто нарезатьвверх, чтобы получить добавленную переменную, но я просто хотел узнать, есть ли более элегантное решение, которое использует исключительно mod_rewrite.

Ответы [ 2 ]

15 голосов
/ 04 сентября 2011

Вы также можете использовать% {QUERY_STRING}, чтобы передать исходную строку запроса на новый URL.или используйте его как хотите, например

RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R]
12 голосов
/ 04 сентября 2011

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

"qsappend | QSA"

Используйте QSA для правильной настройки mod_rewrite для "объединения" дополнительных аргументов при перезаписи.

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

Это добавит"page = $ 1" на любой запрос пользователя.

PS.Хотя будьте осторожны, потому что mod_rewrite с радостью перезапишет «страницу», если пользователь ее укажет.Я не знаю, как это сделать.

...