在Apache运行thinkphp5.1时,发现系统默认生成的.htaccess不生效。
首先先查看怎么修改伪静态
1、修改Apache的配置文件
在Apache的安装目录下,打开config/httpd.conf。
搜索rewrite.so,将前面的#删掉,表示开启URL重写功能
2、添加.htaccess
在public目录下,也就是index.php的同级目录下添加.htaccess(tp5.1自动生成)
3、添加代码
<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>
注意!!!
系统自动生成的代码为
<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 重写规则中的分隔符。
具体来说,这两种方式会影响到 PHP 脚本中 $_SERVER['PATH_INFO'] 或 $_SERVER['QUERY_STRING'] 的值。
- 在第一段代码中,重写后的 URL 会将请求的路径部分作为 index.php 的 PATH_INFO 参数传递,如 index.php/path/to/resource。
- 而在第二段代码中,重写后的 URL 会将请求的路径部分作为 index.php 的 QUERY_STRING 参数传递,如 index.php?path/to/resource。
这里我使用斜杠能正常运行
配置里系统自动生成的也是斜杠,但是却运行不了,反而修改为问号以后能运行,在博客逛了一圈也没搞明白,希望有懂的朋友能在评论区给出高见!