动态页面中有不同的静态URL

时间:2012-11-16 16:43:31

标签: php friendly-url dynamic-url

我有一个网站,每个人都有自己的个人资料。我想拥有静态网址,例如 mywebsite / user1 mywebsite / user2 ,但实际上我会保留在同一页面中并动态更改内容。原因是,当我打开网站时,我向数据库询问了一些数据,每次更改页面时我都不想问它。 我不喜欢像 mywebsite?user = 1

这样的网址

有解决方案吗?

谢谢

[编辑更好的言论]

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

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

4 个答案:

答案 0 :(得分: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'] */
?>

这是我知道实现你想要的最快捷方式。

答案 1 :(得分: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。您可以根据应用程序的需要使路由器变得复杂或简单。

答案 2 :(得分:0)

URL不指示您是否进行数据库调用。这是两个不同的问题。您通常会设置服务器,以便example.com/username在内部重写example.com/user.php?id=username。您仍在运行PHP,URL只是屏蔽它。这被称为漂亮的网址,通过网址重写实现。

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

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

答案 3 :(得分:0)

从数据库中选择全部。

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

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

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

这使您无法更改用户数据更改,因为它们不会自动更新。这里使用的策略是在任何编辑时更新静态页面。

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

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