【问题标题】:How do I make a link on my website for many users but pointing to the same template page?如何在我的网站上为许多用户创建链接但指向相同的模板页面?
【发布时间】:2020-01-24 02:55:35
【问题描述】:

我正在创建一个网站,人们可以在其中向用户写匿名消息。 每个用户都应该有一个“公共”页面,其中只有他/她的图像、姓名和文本区域,以便每个人都可以给他们写信。

在注册时,每个用户都会有一个与他人分享的链接,因此他们可以去那里写下他们的秘密信息,例如:mywebsite.com/john.php,以及另一个用户mywebsite.com/alice.php

问题是我只想制作一个页面作为模板,当我们请求约翰的页面时,将从数据库中查询他的图像和姓名。那么,如何为每个分配了不同链接的用户做到这一点呢?我不希望人们请求——例如——myWebsite.com/template.php?user=John,我希望他们请求mywebsite.com/john

这可能吗?任何建议都会很棒,因为我是初学者并且很困惑。

【问题讨论】:

    标签: php application-design


    【解决方案1】:

    如果您使用 Apache 作为服务器,您可以使用 mod_rewriteroute all request 到同一个 index.php 文件,或任何您喜欢的 URL 模式。它非常强大。

    例如,此配置会将所有“找不到文件/目录”的情况重定向到index.php 文件。您需要将其放入 Apache VirtualHost 配置指令或 .htaccess(如果您设置了 AllowOverride all)。

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} !=/favicon.ico
      RewriteRule ^ index.php [L]
    </IfModule>
    

    您可以使用try_files 设置对nginx 执行类似的技巧。

    然后,您必须在 index.php 上进行自己的 URL 检测,才能正确地为该特定 URL 提供内容。你可以试试 FastRoute 这样的库。

    【讨论】:

    • 非常感谢,我会尽快阅读所有这些内容.. 但在此之前,一个快速的问题.. 完成此 mod 后,它是否出现在请求页面的 url 中,例如,如果我们请求了 website.com/alice,它成功地将我们重定向到模板页面,链接是否会像 website.com/template “重定向后”
    • nginx try_files 绝对是别名而不是重定向,这就是您所说的。 Apache mod_rewrite 模块功能强大得多,因此它可以进行重定向和别名。我上面作为示例提供的重写规则是别名。
    • 我看了一个关于 mod rewrite "in htaccess" 的教程..想法开始浮现在脑海..非常感谢您的指导..
    【解决方案2】:

    几种方法

    1. 重写 Mod(作为考拉的回答)
    2. 自定义您自己路线的框架(例如Laravel
    3. $_SERVER['REQUEST_URI']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多