htaccess使用键/值对重写

时间:2014-05-05 21:05:27

标签: regex apache .htaccess mod-rewrite

我知道你可以使用foo.com/me/data/key1/val1/key2/val2这样的网址,其中包含随机数量的键/值对。我认为这是完成此任务所需的递归规则,但到目前为止我有:

RewriteRule ^(data)/([^/]*)/([^/]*)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC]
RewriteRule ^(data)/(/[^/]+|[^/]+/|/?)$ /datahandler.php [L,QSA]

但这不起作用。我收到404错误。我需要网址的data部分,以区别于任何其他请求。

这是该网站的当前结构:

Site Root
- .htaccess (1)
- index.php
- /Me
- - .htaccess(2)
- - index.php
- - /Scripts
- - - handler.php

htaccess文件的内容:

.htaccess (1)
    RewriteEngine On
    RewriteRule ^Me/?(.*)$ /Me/$1 [NC,L]

.htaccess (2)
    RewriteEngine On
    RewriteRule ^(data)(?:Scripts\/handler\.php)?/([^/]+)/([^/]*)(/.*)?$ /$1Scripts/handler.php/$4?$2=$3 [L,QSA,NC]

2 个答案:

答案 0 :(得分:1)

您只需一条规则即可。将其放在/me/.htaccess文件夹中:

RewriteEngine On
RewriteBase /Me/

RewriteRule ^(data|Scripts/handler\.php)/([^/]+)/([^/]*)(/.*)?$ Scripts/handler.php/$4?$2=$3 [L,QSA,NC]

答案 1 :(得分:0)

尝试:

RewriteRule ^(data)/([^/]+)/([^/]+)(?:/(.+)|)$ /$1/$4?$2=$3 [L,QSA,NC]
RewriteRule ^(data)/?$ /datahandler.php [L]

你做对的第一条规则,但第二条规则有太多斜线。