我有以下网址
http://domain/phpfile.php/something1-param1/something2-param2/somethin3-param3
我可以用 htaccess 重写它吗
http://domain/phpfile.php?something1=param1&something2=para2&something3=param3
参数也是动态的,它们可以是 1、2、3 或 4
我有以下网址
http://domain/phpfile.php/something1-param1/something2-param2/somethin3-param3
我可以用 htaccess 重写它吗
http://domain/phpfile.php?something1=param1&something2=para2&something3=param3
参数也是动态的,它们可以是 1、2、3 或 4
只需使用:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^phpfile.php/something1-([^/]+)/something2-([^/]+)/somethin3-([^/]+)$ phpfile.php?something1=$1&something2=$2&something3=$3 [QSA]
然后在代码中使用 $_GET
如果参数列表是可变的,并且您不想在.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
超全局以包含键 => 值对,就好像它们已作为单独的参数传递一样。
您可以使用这个简单的解决方案
RewriteEngine On
RewriteRule ^phpfile.php(.*)/([^/-]+)-([^/]*)/?$ phpfile.php$1?$2=$3 [QSA]
它可以使用尽可能多的参数。
例子:
phpfile.php/name-walter/age-30
变成phpfile.php?name=walter&age=30