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
(标签-php|关键词-writeR)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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。解决 无用评论 打赏 举报