繁体   English   中英

在 .htaccess 文件中使用变量作为文件夹名称会导致 500 内部服务器错误

[英]Using variables as folder names in .htaccess file gives 500 internal server error

当用户从我的服务器请求/geo/anchorage.json时,我试图让它提供来自/geo/a/n/c/anchorage.json的数据

我在我的.htaccess文件中写入了这条规则,但它会导致 500 内部服务器错误。

RewriteRule ^geo/((.)(.)(.).+)\.json /geo/$2/$3/$4/$1.json [QSA,L]

我已将规则分解为多个部分,使用 php 脚本测试第一部分到 output 参数,并且效果很好。

RewriteRule ^geo/((.)(.)(.).+)\.json /geo/test.php?2=$2&3=$3&4=$4&1=$1 [QSA,L]

似乎这是导致错误的最后一部分,但我找不到我做错了什么。 我已经验证/geo/a/n/c/anchorage.json存在于服务器上。 将变量用作文件夹时有什么特别之处吗?

生成的 URL /geo/a/n/c/anchorage.json也与输入正则表达式匹配( ^geo/((.)(.)(.).+)\.json (500 错误)。 您可以通过在您的正则表达式中更具体来避免重写循环。 例如。 您可以匹配任何不是斜杠( [^/] )的字符,而不是匹配任何字符( . )。

换句话说,请尝试以下操作:

RewriteRule ^geo/((.)([^/])([^/])[^/.]+)\.json$ /geo/$2/$3/$4/$1.json [QSA,L]

我将第一个捕获组作为. (点)因为无论如何这不可能是斜线。

您可以使用此规则来解决您的问题:

RewriteRule ^(geo)/((\w)(\w)(\w).*\.json)$ $1/$3/$4/$5/$2 [NC,L]

由于您没有修改查询字符串,因此无需使用QSA标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM