【问题标题】:Why i cannot use url redirecting with multiple GET elements?为什么我不能将 url 重定向与多个 GET 元素一起使用?
【发布时间】:2019-01-16 02:38:18
【问题描述】:

我正在尝试使用多个获取参数编写 URL。我的 URL 中的参数是 1) 类别名称 2) 纬度和 3) 经度。其中经纬度是可选的。

这是我的 htaccess 重定向:

RewriteRule ^lists/([a-zA-z]+)/[^\d,.]/[^\d,.]/ lists.php?category=$1&latitude=$2&longitude=$3

This is my url to this page :
https://example.com/lists/cars/19.1905792/72.96778239999999

actual url : 
https://example.com/listAds.php?category=cars&lat=19.1905792&lng=72.96778239999999

现在问题是

1) 当我使用这个和其他问题时,我得到一个 404 错误页面

2)正如我所提到的,纬度和经度是可选的。当这两个没有设置时,它们会给我错误。

我已经用一个 GET 请求在其他页面上做了同样的事情,并且在那里工作正常。

【问题讨论】:

    标签: php regex .htaccess url-rewriting


    【解决方案1】:
    • 你让它匹配任何数字(字符列表开头的^\d
    • 您尚未将这两个数字设为可选。 [^\d,.] 表示它恰好需要其中一个字符。而且因为它只能匹配数字逗号或点之一,所以你还不能做小数。如果你想量化多少次,你需要为一个或多个添加.,为零个或多个添加*,或者在[^\d,.]之后做一个范围{min,max}
    • 即使它们匹配,您也没有捕获到这两个数字 - 缺少 ()
    • 您可能只想在同时提供经度和纬度的情况下进行匹配,而不是其中一个 - 缺少对它们进行分组(但未捕获)。

    尝试像 https://regex101.com/r/PtwC0b/4 这样的正则表达式测试器,尽管在 Apache 中我认为您不需要使用 \ 转义 /,因此请忽略 \/

    最终结果是某事,例如/lists/([a-zA-z]+)/(?:([\d.]+)/([\d.]+)/){0,1}

    (?: ... ){0,1} 组是非捕获的,但确保其中的所有内容都是一组 - 即仅提供经度和纬度(并且恰好为零或一组)。完整解释见https://regex101.com/r/PtwC0b/4

    这尚未针对 Apache 进行测试。

    【讨论】:

    • RewriteRule ^lists/([a-zA-z]+)/(?:([\d.]+)/([\d.]+)/) lists.php?im =$1&latitude=$2&longitude=$3 这是根据您的建议提出的.. 但不起作用??
    • 您缺少{0,1}。除此之外,您还没有描述为什么它不起作用。 list.php 会被击中吗?哪些 url 不适用?,$_REQUEST['latitude'] 等如果被击中,会填充什么?等等。请记住,您在互联网上不认识的人试图帮助您解决问题,尽量提供尽可能多的信息可以帮助他们帮助你。请参阅htaccess.madewithlove.be?share=ed312f92-3330-5ecd-9ade-95d34207… 请注意,您可能需要在目的地中使用 \& 转义 &。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2020-08-26
    • 2013-07-02
    • 2015-11-08
    • 2013-08-24
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多