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 中的配置!
我知道有一百万个关于这个的问题,但我已经尝试了其他问题的解决方案,但在我的案例中没有得到解决。我正在尝试将所有内容重定向到 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 中的配置!