【问题标题】:Extract URL slug using PHP. Building a URL shortener使用 PHP 提取 URL slug。构建 URL 缩短器
【发布时间】:2017-06-10 23:43:18
【问题描述】:

我正在使用 PHP 构建一个 URL 缩短网络应用程序。我能够成功生成较短的 URL。但是当用户访问缩短的 URL 时,我无法重定向用户。

如果用户输入https://example.com/aBc1X,我想捕获aBc1X。然后我会查询数据库以找到原始 URL,然后重定向。

我的问题是,如何从上述网址中提取aBc1X

附:我将使用 Apache 或 Nginx。

【问题讨论】:

  • 我推荐YOURLS。为您节省一些时间。
  • @wogsland 我正在构建这个作为大学项目。

标签: php apache http url nginx


【解决方案1】:

你想用;

$_SERVER['REQUEST_URI'];

这将返回您正在寻找的内容。

你可以看到documentation here

【讨论】:

  • 我认为 OP 意味着用户正在输入 URL 作为表单的输入,而不是用户所在的页面。
  • 我不是这么读的——“我能够成功生成较短的 URL。但是当用户访问缩短的 URL 时,我无法重定向。”
  • 我的回答确实假设 OP 已经让每个生成的 URL 都由一个 PHP 脚本处理。
  • 我明白你的意思。也可以这样读。我想当我们看到他选择了哪个答案时,我们就会知道了。
【解决方案2】:

解析网址

$url = "https://example.com/aBc1X";
$path = ltrim(parse_url($url, PHP_URL_PATH), '/');

然后$path 将根据需要变为aBc1X。请注意,此解决方案中将省略 ? 之后的任何查询。更多详情请查看documentation of the parse_url function

【讨论】:

  • $path 实际上会在开头包含“/”,因此可能需要修剪掉。
  • @BA_Webimax 谢谢 - 已修复!
【解决方案3】:

为您做两件事。 首先,您必须将所有流量重定向到一个文件,该文件将成为您的路由器文件。您可以通过在 .htaccess 文件中放置一些规则来做到这一点。我会先放一些通用规则(这个来自 Wordpress):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^redirect\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /redirect.php [L]
</IfModule>

他们告诉url指向的不是文件或目录的任何地方都会运行文件redirect.php。您可能需要根据需要调整该设置。

然后在redirect.php 中,您可以通过查看$_SERVER['REQUEST_URI'] 来捕获url。 对于 url http://example.com/any-url-i-want 你会有 $_SERVER['REQUEST_URI'] == '/any-url-i-want.

现在您唯一需要做的就是在数据库中找到 url,然后进行重定向。 我猜你现在可以处理字符串操作,可以使用 parse_url、正则表达式或简单的字符串切割。

【讨论】:

  • 感谢您的回答。有没有办法在 Ngnix 上做到这一点?
  • 我对 nginx 没有太多经验。但我认为您应该能够为 nginx 转换或编写等效规则。这篇短文应该能帮到nginxlibrary.com/wordpress-permalinks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多