PHP如何创建新的html页面?

时间:2016-09-12 19:22:07

标签: php .htaccess dynamic url-rewriting dynamic-websites

许多人都知道,当有人创建StackOverflow问题时,会生成一个新页面,并且它也会在各种搜索引擎中显示。我想知道PHP代码是如何创建这些页面的。事实证明,像这样的大多数网站都有一个页面,比如profile.php,它从MySQL数据库加载数据。我的问题如下:如果只有一个物理文件,URL如何变化,如果只有一个实际页面,谷歌如何从StackOverflow或Facebook等网站列出所有页面/配置文件/问题?

5 个答案:

答案 0 :(得分:2)

查看此问题所在页面的网址:

http://stackoverflow.com/questions/39457314/how-does-php-create-new-html-pages

服务器的硬盘上没有物理文件。只有一个主脚本叫做#34;显示一个问题页面"。一般来说,动态生成的页面会发生什么:

  1. 用户点击或以其他方式浏览动态网页
  2. Webserver接受请求,并触发对url的重写
  3. 网址从"友好"一个"丑陋"的URL内部的。虽然Stackoverflow不是用PHP编写的,但如果是这样的话,你最终会在内部得到这样的东西:

    http://stackoverflow.com/showquestion.php?id=39457314
    
  4. Webserver执行showquestion.php脚本

  5. 脚本中的代码执行构建响应页面所需的任何工作:获取问题文本,获取任何答案等...格式化为html,并将HTML发送给用户。

答案 1 :(得分:1)

正如评论暗示的那样,这是由HTTP服务器中的URL重写处理的。

默认情况下,知道URL对应于具有相同路径名的物理PHP文件可能会有所帮助,但这可以被覆盖。您可以创建Apache重写规则,以便任何PHP脚本处理URL请求。

https://framework.zend.com/manual/1.12/en/project-structure.rewrite.html中显示了一个示例:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

所有网址都由index.php真正处理,无论网址是什么。在该脚本中,代码可以读取原始请求,然后代码可以决定该请求的组件对应用程序的意义。

答案 2 :(得分:0)

您告诉搜索引擎'Google,Bing,..等',看看您的网站是sitemap.xml列出您的网页,允许他们的网络机器人(蜘蛛)访问网站并抓取数据和链接,您可能有一个页面,如posts.php,但与参数posts.php?id=123posts.php?name=mypost

不同

编辑: 如果要使用一个文件posts.php并创建网站http://domain.com/posts/posttitle,则需要应用前端控制器模式site point link,这意味着设置服务器Apache / Nginx将请求重定向到一个文件(URL重写)此文件包含处理请求或使用MVC框架的逻辑

答案 3 :(得分:0)

Apache(以及PHP)使用Mod_Rewrite将URL重写为更易读的类似目录的名称。例如,您可以使用它来转动

www.example.com/index.php?area=blog&which=entry

进入

www.example.com/blog/entry

HTTP标头不必与实际的文件系统匹配,因此Apache会将它们欺骗到任何想要的地方。

这可能没有mod_rewrite,但我不知道怎么说

答案 4 :(得分:0)

答案是路由。

举个例子网址... httml://www.mysite.com/users/profile/jimmy

如果您正在使用路由系统(大多数框架都有一个),那么.com /(称为'路径')之后的任何内容都会被视为地图。路由系统使用此映射来查找数据。

许多路由系统打破了这条路径'分段。上面的示例将分为以下几个部分。

  • 细分1:用户
  • 第2段:个人资料
  • 第3段: jimmy

对于大多数框架,路由系统会像这样解释地图......

controller/action/param-1/param-2/param-3

'控制器'是指一个班级'在面向对象的PHP

'动作'是一个'功能'的另一个词,也被称为'方法'

最后,参数引用我们想要传递的数据,也许它是一个名称,通常它是一个id。

路由器将采用示例'路径'以上,然后像这样搜索...

采取第一部分。寻找一个班级'叫用户。查找称为用户的类。在名为users的类中查找名为profile的函数。查找配置文件功能。将数据传递给函数。使用传递的数据执行函数。

这是路由器搜索的基本代码结构

<?php

class Users // the controller
{
    function profile($name) // the action
    {
        'Profile for ' . $name; // the passed data 'jimmy'
    }
}