Vigs
Vigs

Reputation: 1331

htaccess rules dont work on linux server

On my development server running xampp on windows my .htacess rewrite rules are working fine. Once we went to our live server which is running Linux core 3.8.0-21-generic #32-Ubuntu SMP Server version: Apache/2.2.22 (Ubuntu), our rules which do not contain parameters no longer work, yet rules which do have parameters are working.

    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]

The above rules which go to contact.php and login.php do not work. But, this more complicated rule with parameters is working: RewriteRule ^game/([a-zA-Z0-9]+)/?$ handles/handle-game-select.php?name=$1 [NC,L]

Is there differences between the two server environments which is causing this to occur?

Also, it appears that if we do something strange such as: RewriteRule ^contact.x contact.php [NC,L] we are able to reach contact.php...

Very confused on this one.

Thank you for any help.

Upvotes: 1

Views: 88

Answers (1)

anubhava
anubhava

Reputation: 786091

I suspect that is due to enabling of MultiViews option. Add this line on top to disable it:

Options -MultiViews
  • Option MultiViews is used by Apache's content negotiation module that runs before mod_rewrite and and makes Apache server match extensions of files. So /file can be in URL but it will serve /file.php.

Upvotes: 1

Related Questions