将查询字符串参数重写为 URL Apache
Rewrite query string parameter into URL Apache
URL 进入 Apache:
localhost:8888/game?level=0
URL 应该来自 apache:
localhost:8888/level0/game
有人可以帮我创建这个重写吗?
尝试通过以下方式解决:
重写引擎开启
RewriteRule ^game\/+(.*?)\?+level=+([0-9]+) /level$2/$1 [L,QSA]
没有运气,因为它不匹配。
谢谢,
彼得
为了能够从查询字符串中捕获值,您需要一个 RewriteCond %{QUERY_STRING}
指令,以便捕获的组将在以下 RewriteRule 中用作 %n
占位符:
RewriteCond %{QUERY_STRING} ^level=(.*)$
RewriteRule ^game /level%1/game [L]
如果您在浏览器中输入 /game?level=0
,apache 将打开 /level0/game
;无需将查询字符串附加到重写的 url (QSA
标志)
您可以在 DOCUMENT_ROOT/.htaccess
文件中使用此代码:
RewriteEngine On
RewriteBase /
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /(game)\?(level)=(\d+) [NC]
RewriteRule ^ %2%3/%1? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteRule ^(level)(\d+)/([^/.]+)/?$ ?= [L,QSA,NC]
URL 进入 Apache:
localhost:8888/game?level=0
URL 应该来自 apache:
localhost:8888/level0/game
有人可以帮我创建这个重写吗?
尝试通过以下方式解决:
重写引擎开启 RewriteRule ^game\/+(.*?)\?+level=+([0-9]+) /level$2/$1 [L,QSA]
没有运气,因为它不匹配。
谢谢, 彼得
为了能够从查询字符串中捕获值,您需要一个 RewriteCond %{QUERY_STRING}
指令,以便捕获的组将在以下 RewriteRule 中用作 %n
占位符:
RewriteCond %{QUERY_STRING} ^level=(.*)$
RewriteRule ^game /level%1/game [L]
如果您在浏览器中输入 /game?level=0
,apache 将打开 /level0/game
;无需将查询字符串附加到重写的 url (QSA
标志)
您可以在 DOCUMENT_ROOT/.htaccess
文件中使用此代码:
RewriteEngine On
RewriteBase /
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /(game)\?(level)=(\d+) [NC]
RewriteRule ^ %2%3/%1? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteRule ^(level)(\d+)/([^/.]+)/?$ ?= [L,QSA,NC]