【问题标题】:Using .htaccess rewrites to treat variables as folder names使用 .htaccess 重写将变量视为文件夹名称
【发布时间】:2015-01-26 21:28:47
【问题描述】:

我想使用 .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=variable .如果有人知道如何做这样的事情,我会很感兴趣,因为我什至不知道从哪里开始。

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    试试:

    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]
    

    【讨论】:

    • 进入的 URL 看起来像“/members/bob/avatar.jpeg”,我需要进行内部重写以将其发送到“/members/avatar.php?username=bob”。您的解决方案采用后者,并重定向到前者,这是一个实际不存在的目录。
    【解决方案2】:

    这最终成为了解决方案:

    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 重写,所以我必须等到升级才能真正使用这种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2014-12-26
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2023-01-13
      • 2017-07-08
      • 1970-01-01
      相关资源
      最近更新 更多