如何在php中的url中的'@' - 选择器之后获取所有内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在php中的url中的'@' - 选择器之后获取所有内容相关的知识,希望对你有一定的参考价值。

我用php编写了一个CDN,它的工作原理很远,但是我想通过添加一个带有它的版本的'@'来选择不同的版本。如何在'@'之后获取版本字符串。示例:https://cdn.steven2105.de/jquery@3.3.0

<?php
$error = false;

$path = str_replace("/", "", $_SERVER['REQUEST_URI']);

switch($path) 
    case "jquery":
        $toOpen = "jquery/3.3.1/jquery.min.js";
        break;
    case "jquery@3.3.0":
        $toOpen = "jquery/3.3.0/jquery.min.js";
        break;
    case "vue":
        $toOpen = "vue/2.6.10/vue.min.js";
        break;
    case "bootstrap-css":
        $toOpen = "bootstrap/4.3.1/bootstrap.min.css";
        break;
    case "bootstrap-js":
        $toOpen = "bootstrap/4.3.1/bootstrap.min.js";
        break;
    case "baguettebox-css":
        $toOpen = "baguettebox/1.11.0/baguettebox.min.css";
        break;
    case "baguettebox-js":
        $toOpen = "baguettebox/1.11.0/baguettebox.min.js";
        break;
    case "popper":
        $toOpen = "popper/1.14.7/popper.min.js";
        break;
    default:
        $error = true;
        break;


if (!$error)  
    header("Location: https://cdn.steven2105.de/libs/$toOpen");
 else 
    include_once "website.php";

编辑:我现在该怎么办?它不起作用。

我在路径https://cdn.steven2105.de/libs/中有不同的库,例如https://cdn.steven2105.de/libs/jquery中有文件,如https://cdn.steven2105.de/libs/jquery/3.3.1/jquery.min.js。我想使用像https://cdn.steven2105.de/jquery@3.3.1这样的较短前缀来访问这些链接。如果我使用'@'字符,它应该重定向到目录https://cdn.steven2105.de/libs/jquery/中的版本,如果没有'@',它应该重定向到最新版本。

什么是最简单的方法?

答案

你可以使用explode函数。它输出为数组并获取它。

<?php

$URL = ' https://cdn.steven2105.de/jquery@3.3.0';
$Result = explode('@', $URL);
echo("<pre>");print_r($Result[1]);

?>
另一答案

您可以使用Web服务器配置修复此问题,而不是使用PHP。

在Apache(https://httpd.apache.org/docs/2.4/rewrite/remapping.html)中重写规则应该可以解决问题。我希望nginx能提供类似的功能。

如果您使用Apache或Nginx为您执行此操作,则会更快,因为您不会有运行PHP脚本的开销。

以上是关于如何在php中的url中的'@' - 选择器之后获取所有内容的主要内容,如果未能解决你的问题,请参考以下文章

如何从 php 中的 rss 提要获取图像

有没有办法在没有将'web'目录的内容移动到root的情况下从Symfony应用程序中的url中删除'/ web'?

img src 或者 background:url('') 中的地址是接口, 如何设置请求头

EasyUI的Datagrid中的url如何获取另一个表单如input type='text'的value值?

php里字符串转换数组

jquery如何获取参数