2017-08-29 2 views
1

J'essaye de rediriger de m.subsub.subdomain.tld à subsub.subdomain.tld?m=true. Donc, fondamentalement, je veux ajouter une requête GET. Les GET existants devraient rester comme ils sont, donc m.subsub.subdomain.tld?abc=def à subsub.subdomain.tld?abc=def&m=true..htaccess: Rediriger de sous-domaine à domaine avec get-request

J'ai essayé le code suivant, mais il ne fonctionne pas:

RewriteEngine On 
ReWriteCond %{HTTP_HOST} m.subsub.subdomain.tld 
ReWriteCond %{REQUEST_URI} ^m/ 
ReWriteRule ^(.*)$ ?=m=true[L] 

J'ai essayé de comprendre comment fonctionne ReWriteCond et ReWriteRule, mais je n'ai pas, donc je besoin de votre aide.

Répondre

0
ReWriteCond %{HTTP_HOST} m.subsub.subdomain.tld 
ReWriteCond %{REQUEST_URI} ^m/ 
ReWriteRule ^(.*)$ ?=m=true[L] 

Cela a un certain nombre de questions:

  • Le REQUEST_URI détient le chemin d'URL (en commençant par une barre oblique), donc je ne suis pas sûr de ce que vous essayez de faire correspondre avec ^m/? Le second argument de la directive RewriteCond est une expression régulière. Les points doivent être backslash échappés afin de correspondre à un point littéral, sinon il correspond à n'importe quel caractère.
  • Vous capturez le chemin URL avec (.*) - est-ce nécessaire? Ce n'est pas obligatoire dans votre exemple. Vos URL source et cible d'exemple ont un chemin d'URL vide.
  • ?=m=true[L] - Vous avez un = erroné avant le m. Il vous manque un délimiteur espace avant les indicateurs RewriteRule ([L]) - cela sera considéré comme faisant partie de la substitution .
  • Étant donné que vous ne spécifiez pas d'indicateur (valide) R ou de schéma + nom d'hôte, il en résulte une réécriture interne et non une redirection.
  • Si vous souhaitez rediriger vers un autre hôte, vous devez le spécifier dans la substitution .
  • La chaîne de requête d'origine sera supprimée sauf si vous incluez explicitement l'indicateur QSA (Query String Append).
  • ReWriteCond et ReWriteRule doivent être écrits respectivement RewriteCond et RewriteRule. Bien que ce soit juste une convention, ce n'est pas une erreur.

Essayez quelque chose comme ce qui suit à la place:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^m\.subsub\.subdomain\.tld [NC] 
RewriteRule^http://subsub.subdomain.tld?m=true [R=302,QSA,L] 

SEAOG existants devraient rester comme ils sont, si m.subsub.subdomain.tld?abc=def à subsub.subdomain.tld?abc=def&m=true

Notez que cela se traduira par la chaîne de requête étant l'inverse. c'est à dire. la chaîne de requête existante de la requête sera ajoutée, non préfixée à la nouvelle chaîne de requête. Est-ce un problème? c'est à dire. ?m=true&abc=def, et non ?abc=def&m=true.

Il s'agit également d'une redirection temporaire (302).Changez-le en 301 (permanent) seulement quand vous êtes sûr que cela fonctionne bien (si cela devait être permanent).