J'ai une nouvelle installation d'Apache 2.2 sur ma machine Vista, tout fonctionne bien, sauf la réécriture du mod.
J'ai commenté
LoadModule rewrite_module modules/mod_rewrite.s
mais aucune de mes règles de réécriture ne fonctionne, même les plus simples comme
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Toutes les règles que j'utilise fonctionnent sur mon hébergement, donc elles devraient être correctes, donc ma question est, y a-t-il quelque chose de caché dans la configuration d'apache, qui pourrait bloquer la réécriture du mod?
apache
mod-rewrite
Jakub Arnold
la source
la source
AllowOverride FileInfo
lieu de tout autoriser, comme le suggèrent TOUTES les réponses sur cette page. Triste de voir toutes ces réponses adopter l'approche aussi longue que cela fonctionne, c'est correct au lieu d'essayer de comprendre les conséquences de la «solution» proposée. Essayez de comprendre ce que vous faites sur votre serveur et comment limiter les privilèges que vous venez de céderAllowOverride All
. RTFM! , il est clair sur le sujet.Réponses:
Pour l'utiliser,
mod_rewrite
vous pouvez taper la commande suivante dans le terminal:Redémarrez apache2 après
ou
ou selon la nouvelle méthode de contrôle de système unifié
Ensuite, si vous le souhaitez, vous pouvez utiliser le
.htaccess
fichier suivant .Le
.htaccess
fichier ci-dessus (s'il est placé dans votreDocumentRoot
) redirigera tout le trafic vers unindex.php
fichier dansDocumentRoot
le fichier sauf si le fichier existe.Donc, disons que vous avez la structure de répertoire suivante et httpdocs est le
DocumentRoot
Tout fichier qui existe dans httpdocs sera servi au demandeur à l'aide de l'
.htaccess
illustration ci-dessus, cependant, tout le reste sera redirigé vershttpdocs/index.php
. Vos fichiers d'application neincludes/app
seront pas accessibles.la source
AllowOverride All
pour que le.htaccess
fichier soit lu du tout.a2enmod rewrite
dans windows?Pour ma situation, j'avais
dans mon
.htaccess
, avec le module en cours de chargement, et cela ne fonctionnait pas.La solution à mon problème était de modifier mon entrée vhost pour l'inclure
dans la
<Directory>
section du site en question.la source
a2enmod rewrite
&RewriteEngine On
dans le.htaccess
- l'existence deAllowOverride all
dans le fichier VirtualHost l'empêchera de fonctionner - c'est ce qui m'a attrapé, en le changeant pourAllowOverride all
fonctionner comme un charme :)AllowOverride
directive détermine les "types de directives autorisées dans les.htaccess
fichiers". En outre, "Lorsque cette directive est définie surNone
, les.htaccess
fichiers sont complètement ignorés. Dans ce cas, le serveur n'essaiera même pas de lire les.htaccess
fichiers dans le système de fichiers." Documentsa2enmod rewrite
, puis dans le fichier VirtualHosts, changez «AllowOverride None» en «AllowOverride All», cela devrait fonctionner. Le fichier VirtualHosts s'applique si vous exécutez plusieurs noms de domaine sur le même serveur (et la même adresse IP). Vous l'auriez configuré pour configurer le domaine.Essayez de régler:
AllowOverride All
.Le deuxième problème le plus courant n'est pas d'activer la réécriture de mod:
a2enmod rewrite
puis redémarrez apache.la source
Si aucun des travaux ci-dessus n'essaye d'éditer / etc / apache2 / sites-enabled / 000-default
presque au sommet, vous trouverez
Remplacez le
AllowOverride None
parAllowOverride All
cela a fonctionné pour moi
la source
/laravel/public/authors was not found on this server
/index.php was not found on this server
<Directory /var/www/html>
pour appliquer la règle à partir de ce dossier et uniquement.Dans Ubuntu:
Courir:
et alors:
mod_rewrite
sera désormais activé!la source
Il existe de nombreuses façons de résoudre ce problème, si vous connaissez la racine du problème.
Problème 1
Premièrement, cela peut être un problème avec votre apache n'ayant pas le module mod_rewrite.c installé ou activé.
Pour cette raison, vous devez l'activer comme suit
Ouvrez votre console et saisissez-la, ceci:
sudo a2enmod rewrite
Redémarrez votre serveur apache.
service apache2 restart
Problème 2
Vous pouvez également, en plus de ce qui précède, si cela ne fonctionne pas, devoir modifier la règle de remplacement à partir du fichier de conf apache (apache2.conf, http.conf ou fichier 000-default).
Localisez "Répertoire / var / www /"
Remplacez «Ne rien remplacer» par «Tout remplacer»
Problème 3
Si vous obtenez une erreur indiquant que le module de réécriture est introuvable, votre module userdir n'est probablement pas activé. Pour cette raison, vous devez l'activer.
Tapez ceci dans la console:
sudo a2enmod userdir
Essayez ensuite d'activer le module de réécriture s'il n'est toujours pas activé (comme mentionné ci-dessus).
Pour en savoir plus, vous pouvez visiter ce site: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
la source
AllowOverride All
car cela activera trop de fonctionnalités de dangerours (comme l'utilisation de scripts Perl). Utilisez plutôtAllowOveride Options
La nouvelle version d'apache a changé d'une manière ou d'une autre. Si votre version apache est 2.4, vous devez vous rendre sur
/etc/apache2/
. Il y aura un fichier nomméapache2.conf
. Vous devez modifier celui-ci (vous devez avoir l'autorisation root). Changer le texte du répertoire comme ceciRedémarrez maintenant apache.
Esperons que ça marche.
la source
Terminal ouvert et typin
a2enmod rewrite
, il activera votremod_rewrite
module pour Apache.Ensuite, allez dans
/etc/apache2/sites-available
et modifiez le fichier par défaut. (Pour cela, vous devez disposer d'autorisations accessibles en écriture sur ce fichier et le dossier disponible sur les sites.)Remplacer ci-dessous par les lignes existantes 4 à 14
Maintenant, redémarrez votre apache par
/etc/init.d/apache2 restart
ouservice apache2 restart
Reprenez le test d'URL propre et cette fois, il sera réussi.
la source
<edit>
Je viens de remarquer que vous avez dit mod_rewrite.s au lieu de mod_rewrite.so - j'espère que c'est une faute de frappe dans votre question et non dans le fichier httpd.conf! :)
</edit>
Je suis plus habitué à utiliser Apache sous Linux, mais j'ai dû le faire l'autre jour.
Tout d'abord, jetez un œil dans votre répertoire d'installation Apache. (Je suppose que vous l'avez installé dans "C: \ Program Files" ici)
Jetez un œil dans le dossier: "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules" et assurez-vous qu'il y a un fichier appelé mod_rewrite.so dedans. (Il devrait l'être, il est fourni dans le cadre de l'installation par défaut.
Ensuite, ouvrez "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf" et ouvrez httpd.conf. Assurez-vous que la ligne:
n'est pas commenté:
De plus, si vous souhaitez activer RewriteEngine par défaut, vous pouvez ajouter quelque chose comme
à la fin de votre fichier httpd.conf.
Sinon, assurez-vous de spécifier
quelque part dans votre fichier .htaccess.
la source
Je viens de faire ça
alors vous devez redémarrer le service apache en suivant la commande
la source
Ancien thread, je veux juste mettre qui ne définit pas AllowOverride à tous, utilisez plutôt le mod spécifique que vous souhaitez utiliser,
Et cette ligne doit être non commentée
Réfrences
la source
Utiliser la commande ci-dessous
Et le redémarrage apache via la commande ci-dessous
la source
Il y a évidemment plus d'une façon de le faire, mais je suggérerais d'utiliser le plus standard:
la source
La première fois que j'ai eu du mal avec les règles de mod_rewrite ignorant mon trafic, j'ai appris (frustrant) que je les avais mal placées
<VirtualHost>
, ce qui signifiait que mon trafic les ignorerait toutes , peu importe leur niveau d'écriture. Assurez-vous que cela ne vous arrive pas:# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Ces paramètres s'activeront si vous effectuez un redémarrage gracieux d'Apache, vous pouvez donc les recycler et surveiller de près le comportement de mod_rewrite. Une fois votre problème résolu, baissez le RewriteLogLevel et célébrez.
Dans 100% de mon expérience, j'ai trouvé que le RewriteLog m'a aidé à découvrir le problème avec mes règles de réécriture. Je ne peux que recommander cela assez. Bonne chance dans votre dépannage!
En outre, ce signet est votre meilleur ami: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
la source
Ce qui a fonctionné pour moi (dans ubuntu):
Aussi, comme déjà mentionné, assurez-vous qu'il
AllowOverride all
est défini dans la section/etc/apache2/sites-available/default
la source