Masquer dynamiquement tous les sous-dossiers sauf l'initial
Essentiellement, je dois modifier le .htaccess
fichier pour développer un moyen de masquer la structure des dossiers après /file
. Par exemple, si j'ai cette URL :
https://www.example.com/file/page/work/assignments.php?
je devrais seulement voir https://www.example.com/file/assignments.php?
Comment cela peut-il être accompli?
Jusqu'à présent, j'ai essayé ce qui suit, mais il masque tous les dossiers après le premier :
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule!^subfolder/ /subfolder%{REQUEST_URI} [L]
Solution du problème
Vous pouvez faire quelque chose comme ce qui suit pour "masquer" page/work
après le /file/
répertoire et avant le dernier segment de chemin.
Cela doit aller dans le .htaccess
fichier racine.
RewriteEngine On
# Redirect "/folder/page/work/<file>" to "/folder/<file>"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(folder)/page/work/([^/]+)$ /$1/$2 [R=302,L]
# Rewrite "/folder/<file>" back to "/folder/page/work/<file>" (if it exists)
RewriteCond %{DOCUMENT_ROOT}/$1/page/work/$2 -f
RewriteRule ^(folder)/([^/]+)$ $1/page/work/$2 [L]
Le redirigera en externe une demande de /folder/page/work/assignments.php?something
vers /folder/assignments.php?something
. Et réécrivez à nouveau la demande en interne.
NB : Vous devriez déjà créer un lien vers en /folder/<file>
interne. La redirection initiale à supprimer page/work
est uniquement destinée au référencement si vous modifiez une structure d'URL existante. Sinon, ce n'est pas strictement nécessaire.
Un regard sur votre règle existante...
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule!^subfolder/ /subfolder%{REQUEST_URI} [L]
Cela semble n'avoir aucun rapport avec ce que vous essayez d'atteindre. Il réécrirait en interne une demande de/<anything>
to /subfolder/<anything>
, essentially "hiding" /subfolder
.
Il n'est pas nécessaire de vérifier l' Host
en-tête demandé, sauf si vous acceptez des demandes vers plusieurs domaines et que cela est spécifique à un seul de ces domaines. (Vous n'en avez pas parlé dans votre question.)
Commentaires
Enregistrer un commentaire