web-dev-qa-db-fra.com

Le serveur Apache ignore .htaccess

J'essaie de faire fonctionner un site Web sur mon environnement de test, mais cela ne fonctionne pas. Je peux charger la page d'index normale, mais lorsque je veux accéder à/page/test, il génère une erreur indiquant que la page n'existe pas. Mon journal indique:

File does not exist: /home/page_url/www/page

Ce qui est en fait vrai, mais il devrait plutôt arriver sur mon contrôleur de page et charger la méthode de test.

Mon .htaccess ressemble à:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* /$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Ma configuration vhost ressemble à:

<VirtualHost *:80>
    ServerName page_url
    Include /etc/Apache2/vhosts.d/vhco.include
    DocumentRoot "/home/page_url/www/"

    # Logging
    CustomLog /var/log/Apache2/access_log common
    ErrorLog /var/log/Apache2/error_log

    # This should be changed to whatever you set DocumentRoot to.
    <Directory "/home/page_url/www/">
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.Apache.org/docs/2.2/mod/core.html#options
        # for more information.
        Options Indexes FollowSymLinks

        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        AllowOverride All

        # Controls who can get stuff from this server.
        Order allow,deny
        Allow from All 
    </Directory>

    <IfModule alias_module>
        # Redirect: Allows you to tell clients about documents that used to
        # exist in your server's namespace, but do not anymore. The client
        # will make a new request for the document at its new location.
        # Example:
        #   Redirect permanent /foo http://www.example.com/bar

        # Alias: Maps web paths into filesystem paths and is used to
        # access content that does not live under the DocumentRoot.
        # Example:
        #   Alias /webpath /full/filesystem/path
        #
        # If you include a trailing / on /webpath then the server will
        # require it to be present in the URL.  You will also likely
        # need to provide a <Directory> section to allow access to
        # the filesystem path.

        # ScriptAlias: This controls which directories contain server scripts.
        # ScriptAliases are essentially the same as Aliases, except that
        # documents in the target directory are treated as applications and
        # run by the server when requested rather than as documents sent to the
        # client.  The same rules about trailing "/" apply to ScriptAlias
        # directives as to Alias.
        ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/"
    </IfModule>

    # "/var/www/localhost/cgi-bin" should be changed to whatever your ScriptAliased
    # CGI directory exists, if you have that configured.
    <Directory "/home/page_url/www/">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from All
    </Directory>
</VirtualHost>

J'utilise Gentoo.

Toute aide serait appréciée.

33
Rene Terstegen
<Directory "/home/page_url/www/">
    AllowOverride None

Cette AllowOverride None désactive .htaccess fichiers en cours de lecture. Voir le manuel .

N'oubliez pas non plus qu'il n'y a rien de magique à propos de .htaccess des dossiers. Ils constituent une solution de contournement grossière pour ne pas avoir un accès complet à la configuration du serveur. Tout ce qu'ils sont est un morceau de configuration Apache. Si vous avez un accès complet à la configuration du serveur, vous devriez mettre des trucs comme ça dans la configuration vhost, pas .htaccess des dossiers.

67
Jim

Comme Jim l'a dit, si vous avez un accès complet à votre serveur, vous devez simplement tout mettre dans les fichiers de configuration du serveur.

Je suis arrivé ici parce que je pensais que mon serveur ignorait mes propres fichiers de configuration htaccess/server. Cependant, il s'est avéré que j'avais mod_expires et mod_rewrite désactivés. Après avoir examiné ces deux-là, tout fonctionnait à nouveau comme il se doit.

Vous pouvez les activer en exécutant ces commandes:

Sudo a2enmod expires
Sudo a2enmod rewrite

Redémarrez ensuite Apache

service Apache2 restart

J'espère que cela aide quelqu'un là-bas!

14

Une chose à retenir si vos règles de réécriture ne fonctionnent toujours pas:

Activez également le module ModRewrite! Ce n'est pas par défaut dans Ubuntu.

4
Michael