【问题标题】:Concept - Serving dynamic content based on URL path?概念 - 基于 URL 路径提供动态内容?
【发布时间】:2013-04-10 23:24:22
【问题描述】:

例如,

用户输入,

www.foob.com/some_path

我不想为用户可能使用的每个不同标识符创建一个 some_path 文件夹......例如,如果它是一个人的名字,就像在许多社交应用程序中看到的那样。

www.foob.com/some_path1

但是,我想将其作为变量读入并提供相关内容

JavaScript

var foo = 'some_path1'

PHP

$foo = 'some_path1';

如何让 'some_path1' 进入 foo?

注意

some_path 是一个变量,它可能包含

some_path_1
some_path_2
some_path_3

澄清

那么就去facebook.com

如果你去

www.facebook.com/your_name

并不是所有 10 亿用户都有一个不同的目录。

提供一个通用页面,其中填充了用户特定的数据。

如何获得 id your_name?

【问题讨论】:

  • 您应该使用重写规则将其写入www.foob.com/somescript.php?foo=filename

标签: php javascript


【解决方案1】:

您需要在您的.htaccess 文件中设置www.foob.com/some_path 以指向带有index.php?q=some_path 或类似名称的PHP 脚本URL:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9-z\-]+)$ index.php?q=$1

那么就只是根据PHP文件中的$_GET['q']来提供不同的内容了。

或在 Javascript 中使用它:

echo '<script>...var q = ' . $_GET['q'] . ';</script>';

【讨论】:

  • 你的意思是参数可以有任何名字?
【解决方案2】:

您可以使用$_SERVER['REQUEST_URI'] 通过 PHP 获取此信息。如果您想在 JavaScript 中使用它,请查看 window.location 对象(可能是 window.location.hrefwindow.location.pathname)。不过,两者都可能需要一些解析才能仅获取您想要的部分。

关于将这些请求发送到您的脚本的重写规则,我会使用类似这样的东西,它将重定向所有通过 app.php 在其他地方找不到的文件的请求。这应该放在您网站根目录的 .htaccess 文件中。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

【讨论】:

  • 在这种情况下,您需要使用 .htaccess 文件拦截这些请求,并将它们全部定向到路由请求的 PHP 文件。
  • 在上面添加了一个重写规则,它将重定向对通过 app.php 找不到的文件的任何请求
  • 是的,这正是你所做的。它检查以确保 Apache 启用了重写模块,然后设置规则。
  • 那么,在这种情况下 app.php 正在路由请求?
  • @livingston_mechanical 是的,没错。这就是$_SERVER['REQUEST_URI'] 出现的地方,检查请求 URL 是什么并正确路由它。
【解决方案3】:

.htaccess 文件添加到您的根目录。

.htaccess

RewriteEngine On

RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1   [L]

您可以在index.php 页面的顶部添加类似的内容:

<html>
  <head>
    <title> MyWebsite <?php echo '~'.ucwords($desired_page); ?> </title>
    <?php
        $page_array = array(
          "home", "blog", "news",
          "links", "about", "contact"
        );

        $desired_page = (isset($_REQUEST['page'])) ? 
          $_REQUEST['page'] : "home";

        if(!in_array($desired_page, $page_array))
          $desired_page = "error";
    ?>
  </head>
  <body>
      <div id="menu">
        <ul>
          <li <?php if($desired_page=="home")
              echo("class=\"current\""); ?>>
            <a href="home">Home</a></li>
          <li <?php if($desired_page=="blog")
              echo("class=\"current\""); ?>>
            <a href="blog">Blog</a></li>
          <li <?php if($desired_page=="news")
              echo("class=\"current\""); ?>>
            <a href="news">News</a></li>
          <li <?php if($desired_page=="links")
              echo("class=\"current\""); ?>>
            <a href="links">Links</a></li>
          <li <?php if($desired_page=="about")
              echo("class=\"current\""); ?>>
            <a href="about">About Us</a></li>
          <li <?php if($desired_page=="contact")
              echo("class=\"current\""); ?>>
            <a href="contact">Contact Us</a></li>
        </ul>
      </div><!--end menu-->

      <div id="content">
        <?php
          /*Includes specific page content*/
          include("content/".$desired_page.".php");
        ?>
      </div> <!-- end #content -->
  </body>
</html>

【讨论】:

  • 我相信他的app.php 处理重定向类似于我从一组有效页面中获取所需页面的方式,但我可能是错的。嗯,这是我采取的一种方法。我只将每个页面的内容存储在单独的 html 文件或数据库中,然后将它们动态地包含在索引中。您永远不必离开索引页面,因为内容将被换出。我只是给你一个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多