Simplifier l'URL

WRInaute occasionnel
Bonjour,
ce que je voudrais faire est simple mais mon essai ne fonctionne pas.
La réécriture à faire est la suivante :
Code:
https://pasdpanique.fr/?action=Nom_page
doit donner
Code:
https://pasdpanique.fr/nom_page
Ne sachant pas gérer la majuscule qui devient une minuscule, j'ai d'abord voulu traiter le reste, donc à la racine de mon site (https://pasdpanique.fr/), j'ai mis ce .htaccess :
Code:
# Le serveur doit suivre les liens symboliques :

Options +FollowSymlinks


# Activation du module de réécriture d'URL :

RewriteEngine on

#https://pasdpanique.fr/?action=Conseils

#https://pasdpanique.fr/conseils

RewriteRule ^https://pasdpanique.fr/$1 https://pasdpanique.fr/?action=$1 [L]
Mais ça ne réécrit rien. Peut-on me dire pourquoi ?
 
WRInaute impliqué
1) tu analyses l'URL complète, avec le protocole et le domaine là où le mod_rewrite n'attends que la partie après le nom d'hôte (documentation).

2) tu ne spécifie aucun modèle de remplacement. Les règles de mod_rewrite reprennent les règles des expressions rationnelles

Apache config:
RewriteRule (.*) /?action=$1 [L]

Mais ça reste assez crade.
 
WRInaute occasionnel
Le plus gênant n'est pas que ça soit crade mais que le site ne fonctionne plus...Comme j'ai pensé que ça venait peut-être du fait d'être en local, je l'ai mis en ligne, même si le site en ligne ne bénéficie pas des dernières mises à jour faites en local : https://pasdpanique.fr/ et patatras.
 
WRInaute impliqué
Ça répondait à la demande qui ne précisait pas quel comportement adopter sur la racine. Avec la commande suivante, pas de redirection sur la racine (mais par contre si appel de /index.php, par exemple) :
Apache config:
RewriteRule (.+) /?action=$1 [L]
 
WRInaute impliqué
Le message d'erreur est un peu court, sans contexte, il va m'être difficile d'être très pertinent. Il s'agit peut-être d'un problème de fichier htaccess incorrect dans sa syntaxe, il faudrait éventuellement que tu le mettes en entier.

Sur un site, j'ai une rewrite qui fait un peu ce que tu souhaites faire. Pour la partie pertinente, avec quelques adaptations :
Apache config:
#url rewriting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /?p=$1 [L,QSA]

Sur ma version, la dernière ligne utilise (.*) plutôt que (.+), mais c'est géré par la suite. C'est pas tout à fait de l'URL rewriting au sens classique, mais pour résumer, tout ce qui est après la racine est considéré comme un paramètre unique p traité en détail dans le code ensuite. Sur ce projet, je découpe ensuite p suivant les barre de fractions (/) pour que l'URL ait l'air d'un chamin d'accès classique connu de l'utilisateur.

La partie URL rewriting est très simple, voir laissée dans sa plus simple expression, par contre le traitement de p est beaucoup plus fouillé : je vérifie que chaque "portion" existe, le nombre total d'éléments pour chacune, et des renvois 4xx lorsque nécessaire. Le drapeau QSA me permet de conserver les autres paramètres lorsqu'il y en a dans l'URL (après le ?).
 
WRInaute occasionnel
message d'erreur complet :

Internal Server Error​


The server encountered an internal error or misconfiguration and was unable to complete your request.


Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error.


More information about this error may be available in the server error log.


Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.



Apache Server at pasdpanique.fr Port 443

Sinon, j'essaye de comprendre un peu ; peux tu m'expliquer (.+)$ et (.*)$ ?

Et si j'arrive pas à faire cet URL rewriting, j'avais dans l'idée de faire un petit traitement en PHP avec $_SERVER["REQUEST_URI"]. Si tu vois de quoi je parle, qu'en penses-tu ?
 
WRInaute impliqué
Plus que le message d'erreur (qui reste vague), ce qui pourrait être utile ce serait le htaccess en intégralité.

peux tu m'expliquer (.+)$ et (.*)$ ?

C'est la syntaxe des expression rationnelles. Les parenthèses délimitent un groupe, le point indique "tout type de caractère", le + indique ou ou plusieurs caractère du même type que celui qui précède, le * indique zéro ou plusieurs caractères du type qui précède. Le dollar indique que ce qui précède doit se trouver à la fin de la chaîne, l'accent circonflexe, au début. Pour résumer, avec ^(.+)$, le premier (et seul groupe) va capturer tous les caractères de la chaîne, pourvu qu'il y en ait au moins un, alors que ^(.*)$ va capturer tous les caractères, même s'il n'y en a aucun.

Et si j'arrive pas à faire cet URL rewriting, j'avais dans l'idée de faire un petit traitement en PHP avec $_SERVER["REQUEST_URI"]
Je vois pas bien l'intérêt de passer par une réécriture dans ce cas.
 
WRInaute occasionnel
Désolé de répondre avec retard ; je n'ai pas eu de notification...
EDIT : finalement, si, mais je viens seulement de la voir...

.htaccess complet :

Apache config:
# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on
#https://pasdpanique.fr/?action=Conseils
#https://pasdpanique.fr/conseils
#RewriteRule ^https://pasdpanique.fr/$1 https://pasdpanique.fr/?action=$1 [L]
#RewriteRule ^https://http://dev.arnaudpoo.fr/ https://http://dev.arnaudpoo.fr/index.php [L]
RewriteRule (.+) /?action=$1 [L]
 
Dernière édition:
WRInaute occasionnel
Oui le fait qu’il dise que la page tarifs existe pas, c’est un bug (car elle existe) mais je vais mettre plusieurs jours avant de corriger (je suis sur mon téléphone et pas chez moi).
Qd il dit que la page existe pas, c’est justement la page 404 qui s’en charge !
 
Discussions similaires
Haut