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

Using .htaccess rewrites to treat variables as folder names

我想使用 .htaccess 重写来创建每个用户在网站上都有自己的文件夹的错觉,而实际上只有少数 PHP 文件生成所有用户内容(通常通过从数据库):

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

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

我完全不知道该怎么做...我已经找到了关于使用 htaccess 重写机制的教程,但是 none 其中涉及将 /folder_name/variable/file_synonym 更改为 /folder_name/file_actual?var=变量。如果有人知道如何做这样的事情,我会非常感兴趣,因为我什至不知道从哪里开始。

尝试:

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/.php?username= [L]

这最终成为解决方案:

RewriteEngine On

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

我用 http://htaccess.madewithlove.be/ 来测试我的工作,以确保我做的每件事都是正确的。显然 Hostgator 的共享服务器不允许内部 htaccess 重写,所以我必须等到我升级才能真正使用这种方法。