Php 为什么我不能对多个GET元素使用url重定向?

Php 为什么我不能对多个GET元素使用url重定向?,php,regex,.htaccess,url-rewriting,Php,Regex,.htaccess,Url Rewriting,我正在尝试使用多个get参数编写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/7

我正在尝试使用多个get参数编写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请求在其他页面上做了同样的事情,在那里效果很好。

  • 您已使其匹配除数字以外的任何内容(字符列表开头的
    ^
    \d
  • 您还没有将这两个数字设置为可选<代码>[^\d,.]表示它只需要这些字符中的一个。因为它只能匹配逗号或点中的一个数字,所以还不能匹配小数。如果要量化多少次,您需要为一个或多个添加
    ,为零个或多个添加
    *
    ,或者在
    [^\d,.]
    之后添加一个范围
    {min,max}
  • 即使这两个数字匹配,您也无法捕获它们-缺少
    ()
  • 您可能只想在同时提供经度和纬度的情况下进行匹配,而不是一个或另一个-缺少对它们进行分组(但不捕获)
尽管在Apache中,我认为您不需要使用
\
来转义
/
,但请尝试使用类似的正则表达式测试程序,因此忽略
\/

最终结果类似于
/lists/([a-zA-z]+)/(?:([\d.]+)/([\d.]+)/){0,1}

(?:…){0,1}
组是非捕获的,但确保其中的所有内容都是一个组-即只提供经度和纬度(以及精确的零或一组)。有关详细说明,请参阅


这尚未针对Apache进行测试。

重写规则^lists/([a-zA-z]+)/(?:([\d.]+)/([\d.]+)/)lists.php?im=$1&纬度=$2&经度=$3这是根据您的建议制作的。。但不工作??您缺少
{0,1}
。除此之外,你还没有描述为什么它不起作用。list.php会受到攻击吗?哪些URL不能使用?,
$\u REQUEST['latitude']
等在被点击时填充的内容是什么?等等。请记住,在internet上你不认识的人正试图帮助你解决问题,请尽量提供更多的信息来帮助他们。请参阅注意事项,您可能需要在目的地使用\&逃离。