htaccess规则不适用于linux服务器

时间:2014-02-17 18:36:03

标签: linux .htaccess ubuntu

在我在Windows上运行xampp的开发服务器上,我的.htacess重写规则工作正常。一旦我们进入运行Linux core 3.8.0-21-generic #32-Ubuntu SMP Server version: Apache/2.2.22 (Ubuntu)的实时服务器,我们不包含参数的规则就不再有用了,但是有参数的规则正在运行。

    Options -Indexes 

    <filesMatch "\.(html|htm|txt|js|htaccess)$">
    FileETag None
    <ifModule mod_headers.c>
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
    </ifModule>
    </filesMatch>

    ErrorDocument 404 /404.php 

    RewriteEngine On    
    #Main site rules
    RewriteRule    ^login/?$    login.php    [NC,L]
    RewriteRule    ^contact/?$     contact.php    [NC,L]

以上访问contact.php和login.php的规则不起作用。但是,这个带参数的更复杂的规则正在起作用: RewriteRule ^game/([a-zA-Z0-9]+)/?$ handles/handle-game-select.php?name=$1 [NC,L]

导致此情况发生的两个服务器环境之间是否存在差异?

此外,如果我们做了一些奇怪的事情,例如:RewriteRule ^contact.x contact.php [NC,L],我们就能够联系到contact.php ...

对此非常困惑。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我怀疑是由于启用了MultiViews选项。在顶部添加此行以禁用它:

Options -MultiViews
  • MultiViews使用选项Apache's content negotiation module,它在mod_rewrite之前运行,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php