Masquer dynamiquement tous les sous-dossiers sauf l'initial

Essentiellement, je dois modifier le .htaccessfichier 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/workaprès le /file/répertoire et avant le dernier segment de chemin.

Cela doit aller dans le .htaccessfichier 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?somethingvers /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/workest 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' Hosten-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

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"