我有以下网址htaccess的重写规则
http://domain/phpfile.php/something1-param1/something2-param2/somethin3-param3
我可以用htaccess的重写它
http://domain/phpfile.php?something1=param1&something2=para2&something3=param3
也PARAMS是动态的,也可以是1,2,3或4
我有以下网址htaccess的重写规则
http://domain/phpfile.php/something1-param1/something2-param2/somethin3-param3
我可以用htaccess的重写它
http://domain/phpfile.php?something1=param1&something2=para2&something3=param3
也PARAMS是动态的,也可以是1,2,3或4
你可以使用这个简单的解决方案
RewriteEngine On
RewriteRule ^phpfile.php(.*)/([^/-]+)-([^/]*)/?$ phpfile.php$1?$2=$3 [QSA]
它将与尽可能多的PARAMS工作,只要你喜欢。
例子: phpfile.php/name-walter/age-30
成为phpfile.php?name=walter&age=30
如果参数列表将变为,而您不想在包括你的.htaccess
文件中每个案例的单独规则,你可能只需要捕获整个查询字符串并在内部解析它。
您可以使用类似这样RewriteRule ^phpfile.php/(.*)$ phpfile.php?params=$1
(未经测试),然后在你的PHP文件只是手工解析查询字符串是这样的:
<?php
#$_GET['params'] = 'something1-param1/something2-param2/somethin3-param3';
preg_match_all('/(\w+)-(\w+)/', $_GET['params'], $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$_GET[$match[1]] = $match[2];
}
unset($_GET['params']);
var_dump($_GET);
?>
这将设置你的$_GET
超全局包含的关键=>值对,就好像它们已经作为单个参数传递一样。
只需使用:
Options +FollowSymLinks
RewriteEngine On
RewriteBase/
RewriteRule ^phpfile.php/something1-([^/]+)/something2-([^/]+)/somethin3-([^/]+)$ phpfile.php?something1=$1&something2=$2&something3=$3 [QSA]
然后在代码中使用$ _GET
你为什么不只是将其改写为R = something1-参数1/something2,参数2/somethin3,参数3,然后用PHP来改变成something1 =参数1等 – Jason 2011-02-07 10:21:37
是你的第二个链接有“para2”而不是“param2”,还是这是故意的错字? – Nanne 2011-02-07 10:29:46