网站建设

thinkphp建站,url中有%20报错问题

用thinkphp建站,当url中有空格,也就是%20的时候,会出现报错的问题。

会返回,forbidden 403禁止错误。

thinkphp默认的伪静态规则,.htaccess文件,代码如下

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>


关键就在于url重写规则,RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]


解决方法1:一是增加特殊字符处理规则,更改为

RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,B,L]


解决方法2:更改为

RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]


这里顺便解释下,各个标识的作用

[QSA] 标志意味着保留现有的查询字符串,并将新的查询字符串附加到它后面。例如,如果原始 URL 是 example.com/page?param1=value1,重写后的 URL 将会是 example.com/index.php?/page?param1=value1,这样原有的查询参数会被保留下来。


[PT] 标志意味着重写后的路径会被传递到下一个处理阶段。这意味着,即使重写规则被匹配到,仍然会在 URL 显示上保持不变。这对于使用后续规则进行进一步处理很有用。


[L] 标志是 Last 的缩写,意味着这是最后一个 RewriteRule,并且不再处理其他规则。


[B] 标志指示 Apache 对路径部分进行转义,这意味着特殊字符如空格会被转义为 %20,而不是直接传递给目标地址。这对于防止潜在的安全问题很有用,尤其是对于用户输入数据的处理。


[E=PATH_INFO:$1] 标志将正则表达式捕获的路径信息作为环境变量 PATH_INFO 传递给目标脚本 index.php。这意味着您可以在 PHP 中使用 $_SERVER['PATH_INFO'] 访问原始的 URL 路径信息,而不需要使用查询字符串。



编辑:

阅读量:15

url链接:https://www.qozr.com/cms_thinkphp-jian-zhan-url-zhong-you-20-bao-cuo-wen-ti.html

Tag标签: thinkphp

同类新闻

更多新闻

Copyright © 2007-2023 千欧中软 版权所有 https://www.qozr.com seo | 网站建设 [渝ICP备15005074号]