通过htaccess对子页面进行值对url建模

时间:2013-10-18 09:59:12

标签: regex apache .htaccess mod-rewrite redirect

好的,目前以我想要的格式获取网址,我在我的.htaccess中使用它

RewriteRule    ^user.php/([0-9]+)/?$          user.php?id=$1    [NC,L]   
RewriteRule    ^user.php/edit/([0-9]+)/?$     user.php?id=$1&type=edit    [NC,L]   

网址,重定向到

domain/user/7/      -> domain/user?id=7
domain/user/edit/7/ -> domain/user?id=7&type=edit

工作正常,但我希望能够做出更好的价值对网址,而不仅仅是严格匹配。

一个例子是

domain/user/key/value/key/value/key/value/
    -> domain/user.php?key=value&key=value&key=value

我在看

.htaccess rewrite to convert directories into /key/value/key/value

如果您只是想从主路径重定向(即localhost / index.php),该示例效果很好,但我希望仅在域/用户时触发,而我无法将其与使用'用户匹配'作为触发器

我目前的.htaccess

# Pretty url's
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule    ^user.php/([0-9]+)/?$          user.php?id=$1    [NC,L]   
RewriteRule    ^user.php/edit/([0-9]+)/?$     user.php?id=$1&type=edit    [NC,L]   

这是可能的,如果是这样的话?

2 个答案:

答案 0 :(得分:1)

Deja vu time !!!我回复的时候写了这个答案:P

以下是您可以为您的案件做的事情:

RewriteEngine On

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

RewriteRule    ^user.php/([0-9]+)/?$          user.php?id=$1    [NC,L]   
RewriteRule    ^user.php/edit/([0-9]+)/?$     user.php?id=$1&type=edit    [NC,L]   

# Pretty url's
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

使用这些规则,/user/n1/v1/n2/v2/n3/v3/n4/v4的网址将被内部转发至/user.php?n4=v4&n3=v3&n2=v2&n1=v1 treating each pair of URL segments separated by / as a name-value pair for QUERY_STRING`。

答案 1 :(得分:1)

Ok this is working for me

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

# Pretty url's
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

URL

/user/n1/v1/n2/v2/n3/v3/n4/v4

输出

Array ( [n4] => v4 [n3] => v3 [n2] => v2 [n1] => v1 ) 
anubhava,你这个人:)