1 votes

.htaccess apache (mod_rewrite) cassé

Bonjour, je rencontre un problème de configuration du mod_rewrite d'Apache sur l'une de nos machines. Quelqu'un a-t-il déjà rencontré ou surmonté l'un de ces problèmes ?

A) Fichier .htaccess - J'ai essayé l'approche la plus simple qui a fonctionné dans un environnement local.

 75 # Various rewrite rules.
 76 <IfModule mod_rewrite.c>
 77   RewriteEngine on
 78 
 79   # BEGIN new URL Mapping rules
 80 #RewriteRule ^http://www.uppereast.com/$ http://www.nyclocalliving.com
 ...
 2307 #RewriteRule ^http://www.uppereast.com/zipcodechange.html$ http://www.nyclocalliving.com/zip-code-change

fig. 1

B) /var/log/httpd/error_log file - il y a ces erreurs seg. fault lorsque j'active la première règle ( ligne 80 ). aucun journal d'erreur sinon.

 1893 [Fri Sep 25 17:53:46 2009] [notice] Digest: generating secret for digest authentication ...
 1894 [Fri Sep 25 17:53:46 2009] [notice] Digest: done
 1895 [Fri Sep 25 17:53:46 2009] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
 1896 [Fri Sep 25 17:53:47 2009] [notice] child pid 29774 exit signal Segmentation fault (11)
 1897 [Fri Sep 25 17:53:47 2009] [notice] child pid 29775 exit signal Segmentation fault (11)
 1898 [Fri Sep 25 17:53:47 2009] [notice] child pid 29776 exit signal Segmentation fault (11)
 1899 [Fri Sep 25 17:53:47 2009] [notice] child pid 29777 exit signal Segmentation fault (11)
 1900 [Fri Sep 25 17:53:47 2009] [notice] child pid 29778 exit signal Segmentation fault (11)
 1901 [Fri Sep 25 17:53:47 2009] [notice] child pid 29779 exit signal Segmentation fault (11)

fig. 2

C) Quelques informations de débogage supplémentaires provenant du Shell ; le mod_rewrite est activé et voici l'architecture de la machine

 1 # apachectl -t -D DUMP_MODULES | more         
 2 Loaded Modules:
 3  core_module (static)
 4  ...
 5  rewrite_module (shared)

 1 # uname -a
 2 Linux RegionalWeb 2.6.24-23-xen #1 SMP Mon Jan 26 03:09:12 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux

fig. 3

J'ai regardé dans certains messages précédents ( .htaccess ne fonctionne pas (mod_rewrite) ), mais je n'ai pas trouvé de solution à ce problème. Je suis sûr qu'il y a un petit interrupteur quelque part qui m'échappe.

Merci d'avance Tim

1voto

Rikalous Points 2996

Commençons par la configuration de votre apache. Si vous obtenez des erreurs de segmentation lors du lancement des règles mod_rewrite, c'est que quelque chose ne fonctionne pas correctement. Utilisez-vous une version RPM/DEB d'Apache ? Ou est-ce quelque chose que vous avez compilé vous-même ?

Je dépannerais d'abord cette erreur avant d'examiner les problèmes de syntaxe, d'autant plus que cela fonctionne sur votre hôte local.

1voto

Je ne suis pas sûr de la raison pour laquelle il y aurait un défaut, mais je pense que vous voulez une règle comme :

RewriteRule ^zipcodechange.html$ http://www.nyclocalliving.com/zip-code-change [R=301,L]
RewriteRule ^(.*)$ http://www.nyclocalliving.com/$1 [R=301,L]

La première règle va spécifiquement écrire la page vers la page nouvellement créée et faire une redirection 301. La deuxième règle prend l'URL demandée et la redirige vers l'autre site en conservant la partie "page" de l'URL. Utilisez [R=301,QSA,L] si vous avez des arguments sur les pages (par exemple, pagename.html?something=else).

RewriteRule ^ http://www.uppereast.com/ $ http://www.nyclocalliving.com

Le nom d'hôte/URL n'est pas disponible à ce moment-là. Je ne connais pas de problèmes avec / dans les règles qui pourraient provoquer une erreur de segmentation, mais je pense que les deux règles ci-dessus font ce que vous voulez. Quant aux erreurs de segmentation, il s'agit d'un problème distinct.

Si les règles suggérées fonctionnent, je pense que quelque chose dans le moteur d'analyse de mod_rewrite doit avoir des problèmes avec le //. Si les règles ci-dessus provoquent toujours des erreurs de segmentation, vous pouvez vous assurer que vos modules apache et la version de base correspondent. Peut-être avez-vous recompilé apache par-dessus l'apache prépackagé et vos options de compilation n'ont pas placé les modules au même endroit.

En ce qui concerne le problème des plus de 1000 règles, Apache doit lire le fichier .htaccess pour tout ce qui est servi dans le répertoire actuel ou inférieur, sauf s'il existe un fichier .htaccess dans l'un des sous-répertoires et qu'il ne contient pas d'instruction Inherit. Il est possible qu'en lisant un fichier de 70k à chaque fois qu'il doit servir une page/un élément, quelque chose dépasse une allocation de mémoire. Vous pouvez également mettre ces règles dans votre configuration Apache.

1voto

zeroasterisk Points 275

Si vous avez besoin de contrôler vos règles sur la base du nom de serveur/nom d'hôte, vous pouvez écrire des règles telles que

# simple and not really useful
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

# more useful
RewriteCond %{HTTP_HOST} domainA\.com
RewriteRule ^(.*)$ http://www.domainB.com/$1 [R=301,L]

# or with a more specific match
RewriteCond %{HTTP_HOST} domainA\.com
RewriteRule ^zipcodechange.html$ http://www.domainB.com/zip-code-change [R=301,L]

Assurez-vous également que votre règle "fourre-tout" se trouve à la fin de toutes les règles spécifiques... le ,L signifie "Last Rule", c'est-à-dire que le reste du fichier .htaccess est ignoré (au moins pour le rewite).

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