0

我有一个网站,每个人都有他的个人资料。我想拥有像mywebsite/user1mywebsite/user2这样的静态 URL ,但实际上我会留在同一页面并动态更改内容。一个原因是,当我打开站点时,我会向数据库询问一些数据,而我不想每次更改页面时都询问它。我不喜欢像mywebsite?user=1这样的 url

有解决办法吗?

谢谢

[编辑更好的解释]

我有一个动态页面,显示我网站的用户资料。所以 URL 类似于http://mywebsite.me?user=2 但我想要一个静态链接,比如 http://mywebsite.me/user2name

我为什么要这个?因为它易于记忆和书写,并且因为我可以动态更改页面的内容,而无需每次向我的数据库询问数据(我需要所有页面中的一些共享信息。所有页面的信息都相同)

4

4 回答 4

3

是的,您的问题有解决方案!

第一个解决方案是服务器依赖。我有点不确定这在 IIS 服务器上是如何工作的,但在 Apache 中它很简单。Apache 可以从名为.htaccess的文件中获取指令。.htaccess 文件需要与您的活动脚本位于同一文件夹中才能工作。它还需要在主服务器配置中加载指令AllowOverride All和模块。mod_rewrite如果您已完成所有这些设置,则需要编辑 .htaccess 文件以包含以下内容

RewriteEngine on
RewriteRule ^mywebsite/([^/\.]+)/?$ index.php?user=$1 [L]

这将允许您mywebsite/index.php?user=12使用mywebsite/12. mod_rewrite的初学者指南。

你也可以只用 PHP 来伪造它。它不会像前面的例子那样漂亮,但它是可行的。此外,请考虑您正在使用用户输入,因此数据将被认为受到污染。用户需要通过 访问脚本mywebsite/index.php/user/12

<?php
    $request = $_SERVER['REQUEST_URI'];
    $request = explode($request, '/'); // $request[0] will contain the name of the .php file
    $user[$request[1]] = $request[2];

    /* Do stuff with $user['user'] */
?>

这些是我所知道的实现你想要的最快的方法。

于 2012-11-16T17:01:35.687 回答
1

首先,请熟悉我在这里介绍的解决方案:http: //codeumbra.eu/how-to-make-a-blazing-fast-ajax-call-to-a-zend-framework-application

这完全符合您的建议:消除所有不必要的数据库查询并仅执行当前需要的查询(在您的情况下:获取用户数据)。如果您的应用程序不使用 Zend Framework,则原则保持不变——您只需按照应用程序所需的方式打开数据库连接。或者只是使用 PDO 或任何你喜欢的东西。

本质上,该方法假定您对站点进行 AJAX 调用以获取所需的数据。在 jQuery 中很容易(上面提到的文章中提供了示例)。您也可以在成功时将之前用户的数据替换为请求的使用 JavaScript 的数据(希望您熟悉 AJAX;如果不熟悉,请发表评论,我会更详细地解释)。

[编辑]

由于您在编辑中解释了您的意思是 URI 重写,我可以建议实施一个简单的 URI 路由器。此处描述了其工作原理的基础知识:http: //mingos.eu/2012/09/the-basics-of-uri-routing。您可以根据应用程序的需要使路由器变得复杂或简单。

于 2012-11-16T16:53:47.490 回答
0

URL 并不规定您是否进行数据库调用。这是两个不同的问题。您通常设置您的服务器,以便example.com/username在内部重写example.com/user.php?id=username为. 您仍在运行 PHP,URL 只是掩盖它。这就是所谓的漂亮 URL,通过URL 重写来实现。

如果您想避免调用数据库,请缓存您的数据。例如,在上面的user.php脚本中,您生成了一个完整的 HTML 页面,然后将其写入某个缓存文件夹中,然后下次脚本不会再次生成页面,而是输出已经创建的页面的内容。或者您只是将数据库数据缓存在某处,但每次仍然重新生成 HTML。

可以将实际的 HTML 文件写入 . /username,因此 Web 服务器将直接提供它,甚至无需打扰 PHP。不过,这通常不是您想要的,因为很难更新/使这些文件过期,而且您通常还需要一些动态内容。

于 2012-11-16T17:05:13.500 回答
0

从您的数据库中选择所有。

然后为每个创建包含脚本内容(index.php?user='s)的文件。将文件名设置为您从 SELECT 语句中获得的 user_id/user_name。

这将为当前文件夹中的每个用户创建一个页面。

为了避免重新创建“静态”页面,您可以设置一个名为“indexedyet”的新列,并在创建文件时将其更改为 1。您只选择此为 0 的文件。您可以每天左右通过 cronjob 执行此操作。

但是,这使您容易受到用户数据更改的影响,因为它们不会自动更新。这里使用的一种策略是在任何编辑时更新静态页面。

另一个可能更好(抱歉还没有足够的咖啡)理想的方法是在用户注册时创建一个文件夹。在注册时为他们量身定制 index.php 页面,然后像 www.mysite.com/myuser 这样的任何内容都会显示他们的“定制版本”。再次更新用户更新页面。

我很乐意根据您的方法提供示例。

于 2012-11-16T17:12:02.120 回答