【问题标题】:Rewrite URL parameters as directories - like a Wikipedia URL将 URL 参数重写为目录 - 就像 Wikipedia URL
【发布时间】:2012-07-03 02:16:29
【问题描述】:

我正在运行一个 wiki,并且 URL 如下所示:

/wiki/index.php?title=MyTitle

但我希望它看起来像这样:

/wiki/MyTitle

我该怎么做?我认为这可以通过 .htaccess 和重写规则来完成,我在这个网站和谷歌上环顾四周,但我找不到任何真正帮助我的东西。现在我在 /wiki/ 目录的 .htaccess 中有这个。

RewriteEngine      on
RewriteOptions MaxRedirects=1
RewriteRule        ^(.+)     index\.php\?title=$1     [L]

但这只是将我重定向到 /wiki/index.php?title=Index.php 并引发“检测到重定向循环!”错误。我不确定我是否真的了解这些东西的工作原理。

【问题讨论】:

  • wiki 软件没有内置功能来处理这个问题吗?
  • 可能。我必须确切地找出它是什么软件(我没有选择或安装它)并查找文档。

标签: url-rewriting wiki


【解决方案1】:

不用制定复杂的规则,只需将所有流量路由到index.php,然后将“子目录”作为参数处理。我使用this guide 来帮助我这样做。从那个网站:

Options +FollowSymLinks
IndexIgnore */*
# Turn on the RewriteEngine
RewriteEngine On
#  Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

把它放在你的 .htaccess 文件中,所有的流量都会转到 index.php。然后将 index.php 编写成本质上是一个“路由器”,它将在您的服务器上加载并显示其他 PHP 脚本。

您可以通过创建一个数组(同样,从链接的站点)从 PHP 访问参数:

$requestURI = explode(‘/’, $_SERVER[‘REQUEST_URI’]);

那么$requestURI将是一个给定参数的数组,所以这样:

/wiki/MyTitle

会变成:

Array ( [0] => [1] => wiki [2] => MyTitle )

【讨论】:

  • 这主要是可行的......但是因为我在我的 PHP 脚本中使用header("Location: ..."); 来重定向到实际页面,它会改变用户地址栏中的内容。我可以通过使用include 而不是重定向来防止这种情况发生,但这看起来……丑陋。
  • 为什么你不能对你的新 URL 使用 header() 重定向方法?所以像header("Location: http://www.whatever.com/wiki/MyTitle");.
  • 好吧,因为这些 URL 实际上并不指向任何东西。我想这样当您尝试访问/wiki/MyTitle 时,它会为您提供/wiki/index.php?title=MyTitle 的内容——但不会更改地址栏中的地址。
  • 好吧,我觉得我们不在同一个页面上。您希望用户转到“wiki/MyTitle”并留在那里(即不重定向),但同时,您希望用户看到“index.php?title=MyTitle”会输出什么,对吗?在这种情况下,您必须更改 index.php 以“理解”我在答案中描述的参数。所以现在,你的 index.php 会得到这样的标题参数:$title = $_GET('title'); 或类似的东西。完全摆脱它,现在让它变成这样:$title = $requestURI[2] 在上面答案中的代码之后。这有帮助吗?
  • 可行的原因是$requestURI[2] 将具有第二个参数。因此,您转到“wiki/MyTitle”,由于您放入 .htaccess 文件中的规则,apache 会将所有流量路由到 index.php。因此,$requestURI[2] 将是“MyTitle”。搞砸了一段时间,让我知道它是否有效(或无效)。
猜你喜欢
  • 2018-12-04
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2014-04-19
相关资源
最近更新 更多