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

时间:2014-07-03 04:59:27

标签: php .htaccess url-routing

我正在从头开始创建自定义PHP MVC模式。这就是我的网址的样子

http://domain.com/post/create

我可以使用以下htaccess

来实现此目的
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+) index.php?controller=$1&action=$2 [L]

所以,当我打印我的$_GET时,我得到了这个

Array ( [controller] => post [action] => create )

到目前为止这很好。但我的问题是,如果我在查询字符串中有任何额外的参数,我就无法得到它。

即。如果我为$_GET打印http://domain.com/post/create?id=1,则表示我没有id

非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

这正是创建QSA标志的位置。默认情况下,如果未指定查询字符串,它将重新使用原始请求的查询字符串。如果指定查询字符串,它将覆盖它。如果使用QSAqsappend(查询字符串追加)标志,它会将原始查询字符串附加到新查询字符串。有关详细信息,请参阅this documentation document

你的规则最终会像这样:

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