Mod_rewrite规则在本地主机上工作,但在生产服务器上不起作用,因为存在文件扩展名


mod_rewrite rule works on localhost but not on production server, due to presence of file extension

我有一个htaccess文件,大约有十几个规则,在本地主机上都可以正常工作。事实上,所有这些在我的生产服务器上都运行良好,唯一的问题是,每次从本地主机迁移到生产服务器时,我都必须修改规则。确切的问题是,在本地主机(XAMPP)上,该规则只在没有文件扩展名(在我的例子中是.php)的情况下工作,而在我的生产服务器上,情况正好相反。

例子
RewriteRule ^demopage.php/([0-9]+)/?$ /anotherpage.php?id=$1 [QSA]

上面的代码在我的生产服务器上运行,但是在localhost上不能

RewriteRule ^demopage/([0-9]+)/?$ /anotherpage.php?id=$1 [QSA]

上面的代码在本地主机上运行,但是在我的生产服务器上不能

关于我的设置

生产服务器运行CentOs 6。我使用虚拟主机的域名。以下是我的虚拟主机的配置:

<Directory /var/my/directory/path/my.domain.com>
        Options -Indexes +Multiviews +FollowSymLinks
        DirectoryIndex index.php index.html
        AllowOverride All
    Order allow,deny
        Allow from all
</Directory>

我的本地主机上的配置有很大的不同,我没有目录特定的规则设置,所以我很难确定这两个设置的不同之处。也没有帮助,我是相当新的mod_rewrites。

如果还有其他细节我忘记了,就问,我会编辑问题。

试着删除Multiviews选项,这个东西与文件扩展名有关。

这与mod_negociation相关,并激活默认扩展搜索(您要求foofoo.htmlfoo.php进行测试)。