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

使用.htaccess重写将变量视为文件夹名称,.htaccess,mod-rewrite,url-rewriting,.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\u name

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

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

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

我完全不知道该怎么做。。。我已经找到了使用htaccess重写机制的教程,但是没有一个涉及到将/folder\u name/variable/file\u同义词更改为/folder\u name/file\u actual?var=variable。如果有人知道如何做这样的事情,我会非常感兴趣,因为我甚至不知道从哪里开始。

试试:

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]

这最终成为解决方案:

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]

我过去常常在工作中测试我的工作,以确保我做的每件事都是正确的。显然,在Hostgator的共享服务器上不允许进行内部htaccess重写,因此我必须等到升级后才能真正使用此方法。

传入的URL看起来像/members/bob/avatar.jpeg,我需要进行内部重写才能将其发送到/members/avatar.php?username=bob。您的解决方案采用后者,并重定向到前者,后者实际上并不存在。