.htaccess tous les répertoires donnent 403 Interdit

J’utilise .htaccess sur mon site multilingue pour faire des modifications d’URL pour un bon référencement.

Par défaut, tous les dossiers sont limités à 403 Forbidden, mais je veux faire des exceptions sur deux chemins. /de et /en . Oui, ces chemins sont multilingues et quand j’ai des pages comme:

 www.mywebsite.com/en/page 

Cela fonctionne correctement, mais quand j’essaie de retourner à la page principale avec un lien comme celui-ci:

 www.mywebsite.com/en 

il montre 403 interdit.

Voici mon code complet:

 RewriteEngine on #remove .php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L] #redirect lang RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] RewriteCond %{REQUEST_URI} !/en 

Sur la dernière ligne, comme vous pouvez le voir, j’ai essayé d’autoriser l’access à /en , mais cela ne fonctionne pas.

Comment puis-je autoriser l’access à ces chemins: /en et /de ?

MODIFIER:

Après beaucoup de recherches, j’ai trouvé que le site principal sur le même serveur que celui de Drupal, il a son propre fichier .htaccess et c’est pourquoi il affiche 403 interdit sur le nouveau site (cms personnalisé) qui se trouve dans un dossier séparé à l’intérieur. Mais lorsque je supprime le fichier .htaccess du site Web principal en tant que test, maintenant sur le nouveau site Web lorsque je www.mywebsite.com/en/ il affiche 404 introuvable.

Cela n’arrive pas si j’entre sur www.mywebsite.com/en

Il redirige simplement vers la page d’index.

Après double vérification, je peux voir que le sélecteur de langue sur mon site change automatiquement les langues, donc si page était /team , elle se comporte comme /en/team et sur la page d’accueil, elle se comporte comme ceci /en/ , pas /en .

EDIT2

J’ai suivi la réponse w3dk, mais la même erreur persiste. C’est le code complet que j’essaie:

 RewriteEngine on #remove .php #RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L] RewriteRule ^([^\.]+)/?$ $1/index #redirect lang RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] 

Cette ligne RewriteRule ^([^\.]+)/?$ $1/index rompt la fonctionnalité de commutateur de langue. Pour un exemple /de/team ne change pas pour le contenu allemand. En ce moment, j’ai commenté cette ligne, parce que ça ne fonctionne pas correctement.

Je poste également le code de mon commutateur de langue:

  
  • <a href="https://stackoverflow.com/de/">DE
  • <a href="https://stackoverflow.com/en/">EN

Si j’entre cette page

 www.mywebsite.com/en/team 

et après cela cliquez sur le commutateur de langue sur la version allemande, il affiche avec succès le contenu allemand et l’URL est comme ceci:

www.mywebsite.com/de/team

MAIS si je vais à la page d’accueil qui a cette URL:

 www.mywebsite.com 

et cliquez sur le sélecteur de langue dans la version allemande, l’URL devient ainsi et affiche 403 ou 404 pages:

www.mywebsite.com/de/

Je veux /en charger la page d’index /en/index

Essayez d’append ce qui suit après votre première règle :

 RewriteRule ^([^\.]+)/?$ $1/index 

Cela devrait alors être repris par la règle finale qui réécrit finalement la demande à index.php?lang=en .

Sinon, essayez ce qui suit:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)/?$ index.php?lang=$1 [L]