Php 使用控制器和操作作为查询字符串美化url

Php 使用控制器和操作作为查询字符串美化url,php,.htaccess,url-routing,Php,.htaccess,Url Routing,我正在从头开始创建一个定制的PHP MVC模式。这就是我的url的样子 http://domain.com/post/create 我可以通过以下htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+) index.php?controller=$1&action=$2 [L] 所以,当我打

我正在从头开始创建一个定制的PHP MVC模式。这就是我的url的样子

http://domain.com/post/create
我可以通过以下
htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+) index.php?controller=$1&action=$2 [L]
所以,当我打印我的
$\u GET
时,我得到了这个

Array ( [controller] => post [action] => create )
到现在为止还可以。但我的问题是,如果我在查询字符串中有任何额外的参数,我就无法得到它

也就是说,如果我打印
$\u得到
http://domain.com/post/create?id=1
,我没有得到
id


任何帮助都将不胜感激

这正是创建
QSA
标志的地方。默认情况下,如果不指定查询字符串,它将重新使用原始请求的查询字符串。如果指定查询字符串,它将覆盖它。如果使用
QSA
qsappend
(查询字符串附加)标志,它将原始查询字符串附加到新查询字符串。有关更多信息,请参阅

您的规则最终将如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+) index.php?controller=$1&action=$2 [QSA,L]

您需要
[QSA,L]
而不是
[L]
,您可能还会发现这一点很有用: