清理包含多个字段的网址?action =& user =

时间:2014-01-29 22:23:24

标签: php .htaccess mod-rewrite clean-urls

很抱歉,如果这个问题已被问到一个问题,我找不到基于之前在本网站和Google上提出的问题的解决方案。

我有这个网址http://mywebsite.com/index.php?action=users&user=John来为用户生成个人资料。我想清理此网址,以便我只需输入http://mywebsite.com/users/John或任何操作即可。现在,为了采取具体行动,我可以简单地使用:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /


RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?action=$1 [L]

然后访问http://mywebsite.com/users访问用户页面,但访问我&users=John的特定用户。我以为我可以简单地使用:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /


RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?action=$1&$2=$3

使我的网址如此http://mywebsite.com/action/extra_action。混乱?如果没有清理网址,我会http://mywebsite.com/index.php?action=ACTION&OTHER=。某些操作不需要&other=,如果您添加其中,则会导致不同的页面。例如,/index.php?action=users会指向生成列表的页面; index.php?action=users&user=John导致John的动态个人资料。我想制作网址http://mywebsite.com/users,或者他们是否想要访问个人资料/users/John。谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

您需要将/和最后两个参数设为可选,否则重定向将无效,除非它们有两个/

RewriteRule ^([a-zA-Z0-9]+)(/?)([a-zA-Z0-9]+)?(/?)([a-zA-Z0-9]+)?$ index.php?action=$1&$3=$5