【问题标题】:Why is index.php not used as my index file when using RewriteEngine in .htaccess为什么在 .htaccess 中使用 RewriteEngine 时 index.php 不用作我的索引文件
【发布时间】:2014-12-13 08:24:16
【问题描述】:

在我的网站上,我有以下 .htaccess 文件以获得更清晰的网址:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

这在用户输入 hostname.com/filename 时效果很好,但是当用户浏览到 hostname.com/map/ 时它会取消自动重定向,因为 RewriteEngine 会在映射后自动添加 .php,从而得到以下结果:

https://hostname.com/map/.php

当用户浏览地图而不是文件时,有没有一种方法可以使用 index.php 作为我的索引文件,同时对用户浏览文件的效果仍然相同?因此,预期结果基于 3 个选项:

【问题讨论】:

  • 我希望这足够清楚,当我再次阅读问题时听起来有点混乱。我会努力改进的。

标签: .htaccess


【解决方案1】:

通常如果配置自动使用index.php,您只需添加 在RewriteCond %{REQUEST_FILENAME} !-f之后:

RewriteCond %{REQUEST_FILENAME} !-d

【讨论】:

  • 我应该将示例中的 -f 更改为 -d,在您的示例中吗?或者在给定示例下方添加 -d 条件?
  • 非常感谢,看来这解决了问题!正如您所建议的那样,我目前正在使用这两种条件,但是它似乎只需将我的示例中的条件更改为您的版本(使用-d),是否有任何理由为什么这似乎也有效,或者为什么我不应该使用它吗?
  • 使用-f 测试是否存在同名文件,在这种情况下不要添加.php。使用-d 测试目录。测试两者是个好主意。您可以阅读以获取更多信息:httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
相关资源
最近更新 更多