[英]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.