htaccess regexp Underline et Space ne fonctionne pas

RewriteRule ^([A-Za-z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC] 

J’utilise cette regex ici et ça marche très bien, mais si je mets par exemple:

 RewriteRule ^([A-Za-z0-9 _'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC] 

Cela ne fonctionne pas ici. En raison de l’espace et du soulignement, je veux inclure des espaces et souligner dans l’expression rationnelle, mais cela ne fonctionne pas du tout. Dois-je append quelque chose de spécial?

Et cela ne fonctionne pas non plus:

 RewriteRule ^(.*)$ public_html/$1 [NC] 

Je veux pouvoir taper n’importe quoi et ouvrir dans le dossier public_html.

Ex, je tape: www.monsite.com/site_1.php alors il ouvre: www.monsite.com/public_html/site_1.php

Cette expression .htaccess est testée sur les serveurs HostGator à l’aide d’Apache 2.2.17 et j’ai également testé dans mon localhost Apache 2.2.17.

L’erreur indiquée lors de l’ajout de _ et de l’espace ou. * Est la suivante:

Erreur Interne du Serveur

Le serveur a rencontré une erreur interne ou une configuration incorrecte et n’a pas pu terminer votre demande.

Veuillez contacter l’administrateur du serveur, admin @ localhost, et l’informer de l’heure à laquelle l’erreur est survenue et de tout ce qui a pu être à l’origine de l’erreur.

Plus d’informations sur cette erreur peuvent être disponibles dans le journal des erreurs du serveur.

Merci les gars d’avance.

De regular-expressions.info :

Les seuls caractères spéciaux ou métacaractères à l’intérieur d’une classe de caractères sont le crochet de fermeture ( ] ), la barre oblique inverse ( \ ), le caret ( ^ ) et le trait d’union ( - ). Les métacaractères habituels sont des caractères normaux à l’intérieur d’une classe de caractères et n’ont pas besoin d’être échappés par une barre oblique inverse.

Vous ne devriez pas échapper des caractères dans le jeu de caractères autres que ceux mentionnés ci-dessus. L’astuce simple est de garder le trait d’union à la fin de votre classe de personnage. Cela identifie le trait d’union comme un littéral.

 RewriteRule ^([a-zA-Z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ _/.-]*)$ public_html/$1 [NC] 

Pour éviter une “boucle continue”, vous pouvez inclure cette condition avant votre règle de correspondance:

 RewriteCond %{ENV:REDIRECT_STATUS} ^$ 

Aussi, si vous voulez simplement faire correspondre tout ce dont vous avez aussi parlé, je fais généralement quelque chose comme ci-dessous. Notez que le %{QUERY_STRING} est là pour transmettre tous les vars GET. Vous pouvez supprimer cela si vous ne prévoyez pas d’utiliser des vars GET réguliers.

 RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^(.*)$ /index.php?request=$1&%{QUERY_STRING} 

J’espère que cette information vous aidera.