我已经为此苦苦挣扎了两天。
目前我有以下重写规则:
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) 使用相当于 urlencode 的 .htaccess 将 & 符号转换为 %26
3)完整的其他解决方案:)
提前致谢!
Edit首先:
当我的网站生成链接时,它会使用 urlencode 进行翻译。所以不应该有 & 的地方没有 & 。
& 是企业名称的一部分,例如:“Bagels&Beans”
当人们想要搜索该公司时,他们会在网址字段中输入:www.example.com/city/bagels&beans。
这就是问题开始的地方。
edit 2当我访问:example.com/city/bagels%26Beans
它转换为以下内容:$_GET:
Array
(
[u] => city/Bagels
[Beans] =>
)
edit 3我分解 $_GET['u'] 来形成参数的方式。
$arg = explode('/',$_GET['u']);