是否可以重写 url,并且仍然可以使用查询?
我的意思是这样的:http://domain.com/?page=Home&derp=true
并将其重写为:http://domain.com/home.htm?derp=true
所以实际上只是重写第一个查询......
我试过这样做:
RewriteRule ^([a-z]+).htm$ index.php?page=$1
但是无法使用 D 传递参数:
是否可以重写 url,并且仍然可以使用查询?
我的意思是这样的:http://domain.com/?page=Home&derp=true
并将其重写为:http://domain.com/home.htm?derp=true
所以实际上只是重写第一个查询......
我试过这样做:
RewriteRule ^([a-z]+).htm$ index.php?page=$1
但是无法使用 D 传递参数:
哦,伙计,你最好写下你的问题。只需在最后添加[QSA]
Docs 即可:
RewriteRule ^([a-z]+).htm$ index.php?page=$1 [QSA]
完全没有问题,这只是 PHP 中一些简单的字符串操作,你甚至不需要正则表达式:
function rewrite_url($url) {
list($prefix, $query) = explode('?', $url, 2) + array('','');
parse_str($query, $vars);
if (isset($vars['page'])) {
$prefix .= $vars['page'] . '.htm';
unset($vars['page'];
}
return $prefix . '?' . http_ build_ query($vars);
}
如果你愿意,你也可以用正则表达式来做到这一点:
$url = preg_replace('/^(.*)$/e', 'rewrite_url(\'$1\')', $url);
对于 URL 重写考虑使用 Apache 的mod_rewrite引擎
如果 mod_rewrite 不是答案,请考虑至少解释您的应用程序的逻辑、您正在使用的框架和其他细节。