URL 重写


可以通过 URL 重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考:

[ Apache ]

  1. httpd.conf 配置文件中加载了 mod_rewrite.so 模块
  2. AllowOverride None 将 None 改为 All
  3. 把下面的内容保存为 .htaccess 文件放到应用入口文件的同级目录下
  4. 配置文件 .htaccess 默认已在目录中存放了一份,可直接使用,所以步骤 3 可以省略。
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymlinks -Multiviews
  3. RewriteEngine On
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
  7. </IfModule>

[ Nginx ]

在 Nginx.conf 配置中,添加:

  1. location ~ \.php(.*)$ {
  2. fastcgi_pass 127.0.0.1:9000;
  3. fastcgi_index index.php;
  4. fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
  5. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  6. fastcgi_param PATH_INFO $fastcgi_path_info;
  7. fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  8. include fastcgi_params;
  9. }

在 Nginx 低版本中,是不支持 PATHINFO 的,但是可以通过在 Nginx.conf 中配置转发规则实现。

  1. location / { // …..省略部分代码
  2. if (!-e $request_filename) {
  3. rewrite ^(.*)$ /index.php?s=/$1 last;
  4. break;
  5. }
  6. }

一个完整的示例:

  1. server {
  2. server_name careyshop.cn www.careyshop.cn *.careyshop.cn;
  3. access_log logs/www.careyshop.cn_access.log;
  4. error_log logs/www.careyshop.cn_error.log;
  5. root /var/www/html/www.careyshop.cn/public;
  6. if ($host ~ www\.(.*)\.(.*)\.(cn|com|net)$) {
  7. return 444;
  8. }
  9. location / {
  10. index index.html index.htm index.php;
  11. autoindex off;
  12. if (-f $request_filename) {
  13. break;
  14. }
  15. if (!-e $request_filename) {
  16. rewrite ^(.*)$ /index.php/$1 last;
  17. break;
  18. }
  19. }
  20. location ~ \.php(.*)$ {
  21. fastcgi_pass 127.0.0.1:9000;
  22. fastcgi_index index.php;
  23. fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
  24. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  25. fastcgi_param PATH_INFO $fastcgi_path_info;
  26. fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  27. include fastcgi_params;
  28. }
  29. location ~ /\.ht {
  30. deny all;
  31. }
  32. }

[ IIS ]

如果你的服务器环境支持 ISAPI_Rewrite 的话,可以配置 httpd.ini 文件,添加下面的内容:

  1. RewriteRule (.*)$ /index\.php\?s=$1 [I]

在 IIS 的高版本下面可以配置 web.Config,在中间添加 rewrite 节点:

  1. <rewrite>
  2. <rules>
  3. <rule name="OrgPage" stopProcessing="true">
  4. <match url="^(.*)$" />
  5. <conditions logicalGrouping="MatchAll">
  6. <add input="{HTTP_HOST}" pattern="^(.*)$" />
  7. <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  8. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  9. </conditions>
  10. <action type="Rewrite" url="index.php/{R:1}" />
  11. </rule>
  12. </rules>
  13. </rewrite>

[ 宝塔面板 ]
如果使用了宝塔面板,在站点管理-设置中,伪静态选择thinkphp即可

文档更新时间: 2018-07-18 13:57