1 votes

problème de configuration concernant le fichier .htaccess sur ubuntu

Je suis en train de créer une application tshirtshop. J'ai la configuration suivante dans l'application

/etc/apache2/sites-enabled/tshirtshop

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/tshirtshop
        <Directory /var/www/tshirtshop>
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

et ce qui suit dans le fichier .htaccess dans l'emplacement

/var/www/tshirtshop/.htaccess

<IfModule mod_rewrite.c>
# Enable mod_rewrite
RewriteEngine On
# Specify the folder in which the application resides.
# Use / if the application is in the root.
RewriteBase /tshirtshop
#RewriteBase /
# Rewrite to correct domain to avoid canonicalization problems
# RewriteCond %{HTTP_HOST} !^www\.example\.com
# RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
# Rewrite URLs ending in /index.php or /index.html to /
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP
RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L]
# Rewrite category pages
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=$1&CategoryId=$2&Page=$3 [L]
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/?$ index.php?DepartmentId=$1&CategoryId=$2 [L]
# Rewrite department pages
RewriteRule ^.*-d([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=$1&Page=$2 [L]
RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId=$1 [L]
# Rewrite subpages of the home page
RewriteRule ^page-([0-9]+)/?$ index.php?Page=$1 [L]
# Rewrite product details pages
RewriteRule ^.*-p([0-9]+)/?$ index.php?ProductId=$1 [L]
</IfModule>

le site fonctionne sur localhost et fonctionne comme s'il n'y avait pas de règle .htaccess spécifiée. c'est-à-dire que si je visualise une page en tant que

 http://localhost/tshirtshop/nature-d2

alors j'obtiens une erreur 404 mais si je visualise la même page en tant que

http://localhost/tshirtshop/index.php?DepartmentId=2

alors je peux le voir.

sudo apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Quelle est l'erreur si quelqu'un peut la signaler dans la configuration ci-dessus, ou bien je dois vérifier autre chose ?

1voto

Registered User Points 4494

J'ai réussi à résoudre le problème, Ce qui se passe, c'est que lorsque vous installez Ubuntu et que vous utilisez apache2, il y a un site web par défaut qui est activé dès qu'apache2 est installé dans Ubuntu.

de sorte que le site Web par défaut qui est actif est

/etc/apache2/sites-enabled/000-default

Ce qui se passe, c'est que j'ai 2 fichiers dans le répertoire sites-enabled

/etc/apache2/sites-enabled/tshirshop  
/etc/apache2/sites-enabled/000-default

quand Apache d'Ubuntu charge les vhosts du répertoire des sites activés

il charge les configurations des serveurs virtuels par ordre alphabétique. donc 000-default a été chargé avant tshirtshop et dans 000-default il y a une ligne qui est la suivante

DocumentRoot /var/www
<Directory /var/www/>
            AllowOverride None
</Directory>

Raisons pour lesquelles ma configuration ne fonctionnait pas 1) Notez le AllowOverride None dans 000-default avait la priorité sur AllowOverride all dans tshirtshop (chargement alphabétique des vhosts), c'est donc la raison pour laquelle mon fichier .htaccess n'a pas été chargé puisque la configuration du site 000-default a été chargée avant de lire le vhost tshirtshop et qu'elle contenait déjà une ligne AllowOverride None 2) Dans mon fichier /etc/apache2/sites-enabled/tshirshop j'ai écrit

DocumentRoot /var/www/tshirtshop

et accédait à l'application en tant que

http://localhost/tshirtshop

J'ai donc changé le DocumentRoot du serveur virtuel tshirtshop.

DocumentRoot /var/www/tshirtshop

à

 DocumentRoot /var/www

et désactivé le site par défaut de l'apache d'Ubuntu

sudo a2dissite default

Maintenant, ma configuration de /etc/apache2/sites-enabled/tshirtshop est lue et appliquée, et mon fichier .htaccess est respecté.

0voto

chesedo Points 1661

Je ne suis pas sûr que cette question soit liée à Ubuntu et doive être posée ici.

Mais voici le problème que je vois. Vous accédez au site via http://localhost/tshirtshop alors que votre /etc/apache2/sites-enabled/tshirtshop Le documentRoot et le répertoire du fichier ont /var/www/tshirtshop . Cela signifie que ce fichier n'est pas utilisé comme configuration pour localhost - selon ces valeurs, le site devrait être accessible à partir de seulement http://localhost no http://localhost/tshirtshop .

Cela peut se produire si le fichier n'a pas été créé dans la section /etc/apache2/sites-available et ensuite activé dans le terminal (ce qui créerait un lien symbolique vers sites-enabled) après que la valeur par défaut ait été désactivée.

Je ne connais pas les commandes d'activation et de désactivation, puisque j'utilise webmin pour gérer la configuration des sites de test locaux pour moi. Et puis je modifie mon /etc/hosts pour pouvoir accéder à quelque chose de plus proche de l'url réelle plutôt qu'à localhost.

Mais revenons au problème, l'utilisation d'une mauvaise URL entraîne la réécriture de votre règle de réécriture vers hhtp://localhost/index.php?DepartmentId=2 ce qui serait correct si le site était accédé via seulement http://localhost et non http://localhost/tshirtshop . Vous pouvez maintenant voir pourquoi vous obtenez une erreur 404.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X