【问题标题】:Access codeigniter website homepage only at example.com and example.com/index.html and not at example.com/index.php [duplicate]仅在 example.com 和 example.com/index.html 访问 codeigniter 网站主页,而不是在 example.com/index.php [重复]
【发布时间】:2021-02-14 02:44:41
【问题描述】:

我只需要在 example.com 和 example.com/index.html 而不是在 example.com/index.php 访问 codeigniter 网站主页,我尝试使用 htacess 将 index.php 重定向到 index.html 但主页变得无法访问.我不想显示它是一个 php 网站。 虽然我可以通过在 application/config/routes.php 中添加以下内容来在 example.com/index.html 上显示主页

$route['index.html'] = 'home/index';

但是 example.com/index.php 仍然可以访问,我想重定向到 404

【问题讨论】:

标签: php .htaccess codeigniter codeigniter-3


【解决方案1】:

尝试在 .htaccess 文件的顶部添加以下内容:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php$ / [R=302,L]

这会将/index.php 的任何直接 请求重定向到/

检查 REDIRECT_STATUS 环境变量的条件确保我们只重定向直接请求,而不是由 Codeigniter 前端控制器(稍后出现在 .htaccess 文件中)重写请求。否则,你会得到一个重写循环(500 Internal Server Error 响应)。

REDIRECT_STATUS 环境变量未在来自客户端的初始请求中设置(即,计算结果为空字符串,^$)。但是,当Codeigniter前端控制器重写index.php的请求时,REDIRECT_STATUS被设置为字符串200(代表一个200 OK HTTP状态),所以上述条件不匹配,请求不当 Codeigniter 将请求重写为 index.php 时重定向。

您也可以使用上述方法重定向到index.html,但必须按照您的建议将index.html 设置为Codeigniter 中的路由。

但是example.com/index.php 仍然可以访问,我想重定向到 404

如果您想提供 404(尽管如上所述的重定向会更好),那么只需将 RewriteRule 更改为读取(保持 条件 与以前一样):

RewriteRule ^index\.php$ - [R=404]

【讨论】:

  • 不是我的 DV,但我认为,如果您将 index.php 发送到 404,整个 Codeigniter 框架将无法正常工作。 Codeigniter 的 Index.php 正在设置框架的系统设置
  • @Vickel 这就是检查 REDIRECT_STATUS 环境变量的目的 - 正如我的回答中所述。这可确保 来自客户端的直接请求使用 404(或重定向)提供服务。 Codeigniter 前端控制器重写的请求(到index.php)没有被触及 - PHP/Codeigniter 仍然可以访问index.php
  • 啊,好的,感谢您指出这一点,不知道/尝试。我通常用 .htaccess 隐藏 index.php 并在我的配置中添加 url_suffix (根据我在 OP 的评论)
  • @Vickel 我已经更新了我的答案,对REDIRECT_STATUS 环境变量的使用进行了更多解释。
  • 谢谢!以这种方式重定向到 404 效果很好,之前我重定向的方式使整个网站无法访问。不知道为什么这个问题被关闭,并且为关闭这个问题而给出的两个参考与这个问题完全不匹配。无论如何我得到了答案。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2014-10-17
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2019-01-27
相关资源
最近更新 更多