【问题标题】:How to change appearance of URL from within a PHP script如何从 PHP 脚本中更改 URL 的外观
【发布时间】:2012-01-13 15:28:49
【问题描述】:

我在同一个文件中有一些 PHP 和 HTML,但我不确定如何使 URL 显示为该页面的名称。

这是我想做的一个例子:假设某个页面 id = 1,该页面的标题是 HelloWorld。

我希望 URL 显示为 site.com/HelloWorld 而不是 site.com/page.php?id=1

但我遇到的问题是,在我通过 id 查询标题后,我才知道该页面内的页面标题。

考虑到我描述的设置,有没有办法让网址显示为页面名称?而且,如果有人通过使用带有页面名称而不是 id 的更好看的 url 链接到该页面,是否还有一种方法可以获取 id 以及页面的其余内容?

谢谢!!

【问题讨论】:

  • 您需要查看许多实现这一目标的框架和 CMS,看看它们是如何实现它的(Drupal、CakePHP、RoR、Symfony 等...)。
  • 嗯,所以你需要通过id查询pageName,并且想要url中的pageName?我想这根本不可能,因为你不会得到正确的页面。因此,要么在此处添加 pageId(如 site.com/1/Helloworld),要么更改您的脚本,以便您可以使用名称获取页面。
  • @Boo 啊,好吧,你可能在正确的轨道上!如何按照您的建议使用 url 完成此操作?获取 id 和 name,然后在脚本中执行 301?

标签: php apache .htaccess


【解决方案1】:

您需要了解更多关于 .htaccess 的工作原理。

这是一个让我开始的好链接:

.htaccess tricks and tips

更新:

这是许多框架中非常常见的做法,所有请求都发送到 index.php,然后您使用 php 提供正确的页面:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.site.com/index.php [L,R=301]
</IfModule>

【讨论】:

  • 谢谢...我不确定这仍然会如何工作。所以我会得到 id 然后重定向?我有两个条件:1)我得到一个传入的 id 并通过它查询名称,然后尝试制作一个漂亮的 url。而相反的情况是 url 很漂亮,我必须动态找出它属于哪个 id。
【解决方案2】:

这实际上是您的 HTTP 服务器软件(通常是 Apache)的功能,而不是 PHP。

您在具有“友好” URL 的网站上看到的情况是,友好名称被捕获在正则表达式中,然后传递给 PHP。

例如:

GET /HelloWorld

被发送到你的网络服务器..网络服务器解析它

RewriteCond ^(A REGULAR EXPRESSION TO CAPTURE YOUR FRIENDLY NAME)$
RewriteRule page.php?id=(EXPRESSION FROM ABOVE)

这样,您的 PHP 脚本将始终接收友好名称作为参数。

看看 Apache 的“mod_write” - 您通常可以在根目录中创建使用“.htaccess”文件的规则。

【讨论】:

  • 谢谢,我遇到的困难是不知道名字是什么。它们不是硬编码的,主要由用户组成。在我的情况下,正则表达式的处理方式是否仍然有效?
  • 正则表达式仅捕获部分 URL。例如,您可以执行 /userpages/(.*)/ 它会捕获 /userpages/frank/ 或 /userpages/justin/ 并将其作为 $_POST['id'] = 'frank' 或 $_POST[' 发送给您id'] = '贾斯汀'。然后您可以选择如何处理它(例如,如果没有相应的页面,则发回 404)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2012-08-20
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多