我尝试将网址设为如下
http://domain/d1/d2/k1/val1/k2/val2/k3/val3
要
http://domain/index.php?one=d1&two=d2&k1=val1&k2=val2&k3=val3
上面的一个和两个是固定键,路径的其余部分用于键值对。 当我在/ d1 / d2 /之后附加了更多的键值对(超过三个)时,如何写出URL重写规则?
更新#1:
以下是我到目前为止的情况。我不能在前两个文件夹的末尾添加动态键值对。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif)$ [NC]
RewriteCond %{REQUEST_URI} !index\.php [NC]
RewriteRule ^([^/]+)/([^/]+) /index.php?one=$1&two=$2 [QSA,L]
我正在考虑添加一个文件夹“查询”(见下文)以帮助键值对的模式匹配,因为您知道在查询之后所有文件夹都是关于键值对的。但是,我不能走得更远。
http://domain/d1/d2/query/k1/val1/k2/val2/k3/val3
答案 0 :(得分:0)
诀窍是遍历重写规则,直到替换目录的所有元素。首先更改所有键/值对,然后更改d1和d2:
# Convert key/value pairs at end of line. Loop (N) until path is just two levels deep
RewriteCond %{REQUEST_URI} ^/(\w+)/(\w+)
RewriteRule (.+)/(\w+)/(\w+)$ $1?$2=$3 [QSA,N]
# Replace two final paths to query string and append to /index.php
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule /(\w+)/(\w+) /index.php?one=$1&two=$2 [QSA]
答案 1 :(得分:0)
另一种方法是将所有请求重定向到/index.php,并将原始路径作为查询字符串附加。然后,您可以使用PHP轻松检查原始路径的元素。