如何使用htaccess拆分URL

Mar*_*ple 1 url .htaccess split

例如:
google.com/en/game/game1.html
应该是
google.com/index.php?p1=en&p2=game&p3=game1.html

如何拆分网址并发送index.php"/"的一部分?

kje*_*ilh 6

如果查询参数具有固定长度,则只能实现此目的.否则还有另一种方法,但需要解析应用程序中的路径.

固定长度实现

以下规则匹配所有三个URL部分,然后将它们重写为index.php的命名查询参数.

RewriteRule ^([^/]+)/([^/]+)/(.+)$ index.php?p1=$1&p2=$2&p3=$3
Run Code Online (Sandbox Code Playgroud)

这改写:

/en/game/game1.html
Run Code Online (Sandbox Code Playgroud)

至:

/index.php?p1=en&p2=game&p3=game1.html
Run Code Online (Sandbox Code Playgroud)

未知的长度实现

# Don't rewrite if file exist. This is to prevent rewriting resources like images, scripts etc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?path=$0
Run Code Online (Sandbox Code Playgroud)

这改写:

/en/game/game1.html
Run Code Online (Sandbox Code Playgroud)

至:

/index.php?path=en/game/game1.html
Run Code Online (Sandbox Code Playgroud)

然后,您可以解析应用程序中的路径.


编辑:)为了使重写规则匹配,如果URL的第一级由两个字符组成,则:

RewriteRule ^([a-zA-Z]{2})/([^/]+)/(.+)$ index.php?p1=$1&p2=$2&p3=$3
Run Code Online (Sandbox Code Playgroud)

你也可以为未知长度的实现做到这一点:

RewriteRule ^[a-zA-Z]{2}/ index.php?path=$0
Run Code Online (Sandbox Code Playgroud)