假设我有成员,当他们登录时,他们会转到mysite.php/id=username
,其中用户名总是不同,具体取决于他们的实际用户名。
我可以在 mod rewrite 中使用一行来去除 id= 并留下用户名吗?我该怎么做?
示例:mysite.php?id=john
- 我希望它是mysite/john
,对其他人也是如此。
假设我有成员,当他们登录时,他们会转到mysite.php/id=username
,其中用户名总是不同,具体取决于他们的实际用户名。
我可以在 mod rewrite 中使用一行来去除 id= 并留下用户名吗?我该怎么做?
示例:mysite.php?id=john
- 我希望它是mysite/john
,对其他人也是如此。
要重写给/mysite/john
您/mysite.php?id=john
,请使用:
RewriteBase /
RewriteRule ^mysite/([^/]+) mysite.php?id=$1 [L]
你可以在这里测试这个规则:http: //htaccess.madewithlove.be/
尝试:
RewriteRule ^([a-zA-Z0-9\-_]+).php$ mysite.php?id=$1 [L]
当然,只需这样做:
RewriteRule ^mysite/([A-za-z0-9-]+).php$ mysite.php?id=$1 [L]
这假设用户 ID 是字母(大写和小写)、数字或破折号。将字符添加到适合您的正则表达式。当然你可以做任何事情.+
来匹配任何东西,但我不喜欢让事情变得那么开放。
您不能mod_rewrite
为此使用,您可以尝试mod_substitute
(确保mod_filter
也启用):
AddOutputFilterByType SUBSTITUTE text/html
Substitute s|/?index\.php\?id=([a-zA-Z0-9_-]+)|/index/$1/|i
不知道这会有多好,还没有测试过。
然后你可以使用mod_rewrite
:
RewriteBase /
RewriteRule ^index/([a-zA-Z0-9_-]+) index.php?id=$1 [L]
更新:
我想我误解了您的问题,如果您尝试将地址栏表单中的 URL 更改index.php?id=username
为此index/username
应该可以:
RewriteCond %{QUERY_STRING} ^id=([a-zA-Z0-9_-]+)$
RewriteRule ^index\.php$ index/%1/? [R,L]