12
votes

Rewriterule Création de 500 erreurs de serveur internes

J'ai ce qui suit dans mon fichier .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?id=$1


2 commentaires

Une erreur 500 signifie généralement une erreur a été enregistrée quelque part. Recherchez vos journaux d'erreur Apache et PHP et voyez quelle est l'erreur réelle.


L'erreur 500 livrée sur le navigateur aurait dû vous informer que le message d'erreur complet serait dans les journaux du serveur. Lis-les.


5 Réponses :


2
votes

Vous devriez essayer d'ajouter une barre oblique à l'avant:

RewriteLogLevel 3
RewriteLog ${APACHE_LOG_DIR}/rewrite.log


4 commentaires

Eh bien, c'est trié l'erreur de serveur, mais maintenant j'obtiens l'URL / l'URL requis / 10 n'a pas été trouvée sur ce serveur. Des idées?


Eh bien, maintenant, cela ressemble à la réécriture ne correspond pas.


Ajouter un réécritelog dans votre Vhost (les ne sont pas valides dans .htaccess) pour pointer vers le fichier journal que vous avez wang à écrire à. J'ai édité ma réponse avec un exemple.


Votre solution ne peut pas fonctionner car ReWrétraule ne correspond pas à la barre oblique de tête dans .htaccess.



21
votes

Votre code est garanti de générer une erreur de 500 serveur interne car elle provoque une boucle infinie. La raison est que votre motif URI correspondant est le suivant: ^ Directory /(.*)$

qui correspond à vos URL avant et après la réécriture. Et une fois qu'il a atteint Max permis de réécriture interne, la limite de réécriture interne, 500 erreurs de serveur internes et une erreur de serveur interne.

modifie votre code à ceci: xxx

ci-dessus code a Un Extra rewriteCond% {request_filename}! -f qui veillera à interdire l'exécution ultérieure de Rewriterule après la première fois depuis /directory/index.php sera un fichier valide.


1 commentaires

Je voulais juste ajouter que je n'ai pas réalisé que ma règle de réécriture se référencait également elle-même. Ajouter la condition de réécriture fixe le problème. Quelque chose d'évident mais facile à négliger.



19
votes

J'ai le même problème et j'ai trouvé que le module "réécrire" n'est pas encore activé dans mon cas. Donc, j'ai besoin de le activer, puis de redémarrer Apache Server:

  • Activer le module "Réécrire": sudo a2enmod réécrit
  • Redémarrez Apache Server: SUDO SERVICE Apache2 Redémarrez

    J'espère que cela aidera tout le monde.


0 commentaires

0
votes

Si vous utilisez un codeigniter et que vous utilisez des problèmes d'erreur 500. Suivez la solution.

afin de supprimer le segment "index.php" des URL dans le codeigniter, vous devez faire 2 choses. Le premier consiste à modifier le fichier /system/application/config/config.php , modification de la valeur de l'index_page pour vider: xxx

le La deuxième étape consiste à créer un fichier .htaccess xxx

et c'est tout! À partir de maintenant, les URL de votre site / système fabriquées avec CodeDigniter ne seront plus le fil (appelé "gênant" par certains) "index.php".


0 commentaires

0
votes

Une autre journée à la recherche d'une étrange erreur sur Apache. Travailler sur My Docker Apache 2.4.48 Conteneur alpin. Mais pas en production.

Voici la différence (juste un point):

ne fonctionne pas sur le fournisseur d'hébergement xxx

travail sur le fournisseur d'hébergement < / p> xxx


0 commentaires