gpt4 book ai didi

php - .htaccess mod 重写规则和符号

转载 作者:行者123 更新时间:2023-12-03 23:49:25 25 4
gpt4 key购买 nike

这两天我一直在为这个问题苦苦挣扎。

目前我有以下重写规则:

RewriteRule ^(.*)$ index.php?u=$1 [NC,L]

它将 example.com/后面的所有内容作为 GET 变量 u 移植到 index.php。这是在 index.php 中处理的,用爆炸来定义不同的参数是:城市(在第一个斜线之间)和位置(第二个参数)

这非常适用于以下网址:

example.com/City/location/或 example.com/City/location
example.com/City/或 example.com/City

产生:

$arg[0] = city
$arg[1] = location

当位置名称中包含“&”符号时会出现问题:

example.com/city/location&more

转换为:

index.php?u=city/location&more

问题很明显;我不能再在 index.php 中使用 explode 参数,因为位置名称的第二部分未存储在 $_GET['u'] 中。

我该如何解决这个问题?

我想到了三个我不知道如何实现的解决方案:
1) 重写重写规则以拆分.htaccess 中的城市和位置
2) 使用 .htaccess 等效的 urlencode 将 &-sign 转换为 %26
3) 一个完整的其他解决方案:)
提前致谢!

编辑首先:当我的网站生成链接时,它会使用 urlencode 进行翻译。所以不应该有 & 的地方没有。& 是商业名称的一部分,例如:“Bagels&Beans”当人们想要搜索该公司时,他们会在 url 字段中键入:www.example.com/city/bagels&beans。这就是问题开始的地方。

编辑2当我去:example.com/city/bagels%26Beans它转换为以下内容:$_GET:

Array
(
[u] => city/Bagels
[Beans] =>
)

编辑 3我分解 $_GET['u'] 以形成参数的方式。

$arg = explode('/',$_GET['u']);

最佳答案

您不需要将 URL 路径放在参数中。您可以像这样简单地解析原始请求的路径:

$_SERVER['REQUEST_URI_PATH'] = strtok($_SERVER['REQUEST_URI'], '?');
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));

现在您只需要这条规则来将请求重写到您的index.php:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]

附加条件是只重写不能映射到现有文件的请求。

关于php - .htaccess mod 重写规则和符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com