使用.htaccess重写将变量视为文件夹名称

时间:2015-01-26 21:28:48

标签: .htaccess mod-rewrite url-rewriting

我想使用.htaccess重写来创建每个用户在网站上拥有自己的文件夹的错觉,当时它只是少数生成所有用户内容的PHP文件(通常是从数据库中提取) ):

/members/bob/avatar.jpeg指向/members/avatar.php?username=bob

/members/bob/about.html指向/members/about.php?username=bob

我完全失去了如何做到这一点......我已经提到了使用htaccess重写机制的教程,但没有一个涉及将/ folder_name / variable / file_synonym更改为/ folder_name / file_actual ?VAR =变量。如果有人知道如何做这样的事情我真的很感兴趣,因为我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine On

RewriteCond %{THE_REQUEST} \ /+members/avatar\.php\?username=([^&\ ]+)
RewriteRule ^ /members/%1/avatar.jpeg? [L,R]

RewriteCond %{THE_REQUEST} \ /+members/about\.php\?username=([^&\ ]+)
RewriteRule ^ /members/%1/about.html? [L,R]

RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^members/([^/]+)/(avatar|about)\.(jpeg|html)$ /members/$2.php?username=$1 [L]

答案 1 :(得分:0)

这最终成为解决方案:

RewriteEngine On

RewriteRule ^members/([A-Za-z0-9-]+)/avatar.jpeg?$ members/avatar.php?username=$1 [NC,L]
RewriteRule ^members/([A-Za-z0-9-]+)/about.html?$ members/about.php?username=$1 [NC,L]
RewriteRule ^members/([A-Za-z0-9-]+)/feed.html?$ members/feed.php?username=$1 [NC,L]

我一直用http://htaccess.madewithlove.be/来测试我的工作,以确保我做的一切正常。显然,在Hostgator的共享服务器上不允许内部htaccess重写,所以我必须等到升级到真正使用这种方法。