1

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

我如何拆分 URL 并发送 index.php 的“/”部分?

4

1 回答 1

6

只有当查询参数是固定长度时,您才能实现此目的。否则还有其他方法,但需要解析应用程序中的路径。

定长实现

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

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

这重写:

/en/game/game1.html

到:

/index.php?p1=en&p2=game&p3=game1.html

未知长度实现

# 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

这重写:

/en/game/game1.html

到:

/index.php?path=en/game/game1.html

然后您可以在应用程序中解析路径。


编辑:)使重写规则仅在 URL 的第一级由两个字符组成时才匹配:

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

您也可以为未知长度实现这样做:

RewriteRule ^[a-zA-Z]{2}/ index.php?path=$0
于 2013-03-12T12:55:14.213 回答