【问题标题】:Capture URLs after slash [duplicate]在斜杠后捕获 URL [重复]
【发布时间】:2015-01-21 21:05:21
【问题描述】:

http://domain.com?keyword=value

...很容易捕获,因为它是一个简单的 GET 请求,但是,我想捕获直接在 / 之后传递的值,如下所示:

http://domain.com/value

我可以像这样获取这些值:

preg_match("/[^\/]+$/", "http://www.domain.com/value", $matches);
$last_word = $matches[0]; // value

...但是,该 URL 会生成 404,因为它正在寻找一个名为 value 的目录,而该目录显然不存在。

【问题讨论】:

  • 我不清楚你到底想达到什么目的,因为这里的 php 可以按照你的意愿工作。可能是url重写?
  • @alphawow 没错,URL 重写
  • 所有对索引页面的请求可能吗?
  • 您可以将任何 URL 重定向到某个文件,例如router.php 然后您可以使用 $_SERVER['REQUEST_URI'] 读取 URL。见stackoverflow.com/questions/8595964/…

标签: php .htaccess


【解决方案1】:

一个简单的 URL 重写就可以了。你可以删除那个丑陋的正则表达式。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA,NC]

说明:

RewriteEngine on - 设置重写引擎
RewriteBase / - / 表示您的项目/网站的根,在这种情况下是域之后的所有内容
RewriteCond %{REQUEST_FILENAME} !-f - 不是实际文件RewriteCond %{REQUEST_FILENAME} !-d - 不是实际目录
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA,NC] - 将域之后的所有内容发送到 url 键 GET 全局变量

现在您可以使用$_GET['url'] 获取网址。当然,您可以更改该 GET 的密钥。

【讨论】:

  • 如果 domain.com/somevalue 是一个文件夹,它将显示该文件夹(如果没有被 apache 级别阻止)。但是,404 页面可以由您的 php 代码制作。
  • 哇,一个优雅的解决方案! :)
猜你喜欢
  • 2019-02-04
  • 2015-06-18
  • 2016-01-10
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
相关资源
最近更新 更多