.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]
有没有办法让它工作?
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]