u014378108 2025-05-27 17:15 采纳率: 0%
浏览 8

(标签-php|关键词-writeR)


php 中

.htaccess 如下:
RewriteRule ^loupan/saledate/(.*)/$ loupan/search.php?saleDate=$1 [QSA,L]
RewriteRule ^loupan/saledate/ loupan/search.php?saleDate=now [QSA,L]
RewriteRule ^loupan/saledatee/ loupan/search.php?saleDate=now [QSA,L]

RewriteRule ^loupan/(.*)/$ loupan/house.php?hid=$1 [QSA,L]


url  为  http://xm.999.net/loupan/saledate/   时,
会走 RewriteRule ^loupan/(.*)/$ loupan/house.php?hid=$1 [QSA,L] 这条,跳到house.php
而不是预期的  RewriteRule ^loupan/saledate/ loupan/search.php?saleDate=now [QSA,L]
我在house.php打印$_SERVER 
 'REDIRECT_URL' => string '/loupan/saledate.php/' (length=21)
  'REDIRECT_QUERY_STRING' => string 'hid=saledate.php' (length=16)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
  'REQUEST_METHOD' => string 'GET' (length=3)
  'QUERY_STRING' => string 'hid=saledate.php' (length=16)
  'REQUEST_URI' => string '/loupan/saledate/' (length=17)

发现 REDIRECT_URL这边会自己添加.php后缀,导致不走RewriteRule ^loupan/saledate/ loupan/search.php?saleDate=now [QSA,L] 这条。

当我 把datasale 改成 datasalee时,就是 http://xm.999.net/loupan/saledatee/  时,
走的是RewriteRule ^loupan/saledatee/ loupan/search.php?saleDate=now [QSA,L]这条  ,跳到search,打印 $_SERVER时,REDIRECT_URL 不会自动添加.php

  'REDIRECT_URL' => string '/loupan/saledatee/' (length=18)
  'REDIRECT_QUERY_STRING' => string 'saleDate=now' (length=12)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
  'REQUEST_METHOD' => string 'GET' (length=3)
  'QUERY_STRING' => string 'saleDate=now' (length=12)
  'REQUEST_URI' => string '/loupan/saledatee/' (length=18)

我的疑惑是,为什么会自己添加.php
  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-05-27 17:15
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到了使用 .htaccess 文件重写 URL 的问题,具体来说是使用 RewriteRule/loupan/saledate/(.*)/$ 重写到 loupan/search.php?saleDate=$1

    问题的关键是 $1 是什么意思?在正则表达式中,() 是捕获组,$1 是指第一个捕获组的内容。

    在你的情况下,(.*) 是一个捕获组,匹配任何字符(包括 /),因此 $1 将包含匹配的所有内容。

    如果你想要将 / 作为分隔符,使用以下修改:

    RewriteRule ^loupan/saledate/([^/]+)/$ loupan/search.php?saleDate=$1 [QSA,L]
    

    这里使用 [^/]+ 来匹配一个或多个非 / 字符,$1 将包含匹配的所有内容,除去 /

    如果你想要将 / 作为分隔符,并且保留 /,使用以下修改:

    RewriteRule ^loupan/saledate/([^/]+)/$ loupan/search.php?saleDate=$1& [QSA,L]
    

    这里使用 &/ 作为参数传递给 search.php

    评论

报告相同问题?

问题事件

  • 创建了问题 5月27日