.htaccess - 使用不同参数清理网址

时间:2016-12-01 22:03:28

标签: .htaccess clean-urls

有没有办法让它发挥作用?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?a=1&b=2 [L]
RewriteRule ^([^/]+)/([^/]+)$ index.php?a=$1&c=$2 [L]

网址应如下所示:

http://test.com/a/b
or
http://test.com/a/c

它只适用于第一条规则。

在我的情况下,我尝试创建个人资料页面并获取会话ID的ID或通过$ _GET [' id']。

因此,如果我访问其他人的个人资料,则网址为

index.php?page=profile&id=25
/profile/25

如果我访问我自己的个人资料,那就是

index.php?page=profile
/profile

例如,我想编辑我的个人资料

index.php?page=profile&action=edit
/profile/edit

我希望你理解我的意思并且可以帮助我。

1 个答案:

答案 0 :(得分:0)

解决这个问题的关键是注意到你想传递的每个参数之间的差异。

  • 如果访问者正在查看其他人的个人资料,则会传递ID(数字)。
  • 如果访问者正在编辑其个人资料,则会传递参数字符串(字母数字)
  • 如果访问者正在查看自己的个人资料或其他通用页面,则不会传递额外参数

.htaccess规则可以最容易地从最具体到最一般的规则编写,因此将其翻译成规则

RewriteRule ^([^/]+)/([0-9]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^([^/]+)/([a-z0-9]+)$ index.php?page=$1&action=$2 [NC,L]
RewriteRule ^([^/]+)$ index.php?page=$1 [L]

跳过现有文件也很重要。目录,但是因为RewriteCond语句只与下一个RewriteRule匹配,所以最简单的方式是以比你正在做的方式稍微不同的方式。

RewriteEngine On

# If the file or directory exists, exit
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [END]

RewriteRule ^([^/]+)/([0-9]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^([^/]+)/([a-z0-9]+)$ index.php?page=$1&action=$2 [NC,L]
RewriteRule ^([^/]+)$ index.php?page=$1 [L]