.htaccess - 使用不同参数清理 url

.htaccess - clean urls with different parameters

有没有办法让它工作?

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

url 应如下所示:

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

它只适用于第一条规则。

在我的例子中,我正在尝试创建一个配置文件页面并通过会话 ID 或通过 $_GET['id'].

获取 ID

因此,如果我访问其他人的个人资料,url 是

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

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

index.php?page=profile
/profile

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

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

希望你能理解我的意思并能帮助我。

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

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

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

RewriteRule ^([^/]+)/([0-9]+)$ index.php?page=&id= [L]
RewriteRule ^([^/]+)/([a-z0-9]+)$ index.php?page=&action= [NC,L]
RewriteRule ^([^/]+)$ index.php?page= [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=&id= [L]
RewriteRule ^([^/]+)/([a-z0-9]+)$ index.php?page=&action= [NC,L]
RewriteRule ^([^/]+)$ index.php?page= [L]