mod_rewrite 全部到 index.php 在一个环境中

mod_rewrite all to index.php in one environment

我知道有一百万个关于这个的问题,但我已经尝试了其他问题的解决方案,但在我的案例中没有得到解决。我正在尝试将所有内容重定向到 index.php:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

这在我的本地环境中有效,但在我的暂存环境中它失败了,我收到 404 错误。我检查过 phpinfo() 是否启用了 mod_rewrite。我试过改变一些东西,比如使用 ^(.*)$ 而不是 ^ 和使用 /index.php 而不是 index.php

还有什么问题?

想通了。这是apache配置的问题。为我正在工作的网站设置它的人在网站的 .conf 文件中是这样设置的:

<Directory "/data/path/to/directory">
  Options FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all

  # and a bunch of rewrite rules...
</Directory>

AllowOverride None 禁止使用.htaccess。在我们的本地和开发环境中,目录结构不同,所以这段代码甚至没有得到应用。这就是 .htaccess 起作用的原因。

为了解决这个问题,我要么必须将上面提到的行更改为 AllowOverride All,要么为我正在处理的网站添加另一个配置,就像上面那个做我想做的那样.htaccess.

如果环境配置得当,任何人都不会遇到这样的问题,但如果有人运行遇到类似情况,请检查站点在 apache 中的配置!