GOOGLE ADS

Donnerstag, 14. April 2022

Umleitungs-URL mit .htaccess fügt alten Pfad hinzu

In derselben Domäne möchte ich eine 301-Umleitung von /this/old/path/file.pdfnach vornehmen/this/new/path#abc

Ich habe das versucht:

Redirect 301 /this/old/path/file.pdf /this/new/path#abc

Und es führt die Umleitung durch, zeigt aber den folgenden Pfad:

/this/new/path#abc?/this/old/path/file.pdf

Es sollte sein:

/this/new/path#abc

Irgendein Hinweis darauf, was hier falsch ist?

---Aktualisieren Dies ist der Inhalt meiner.htaccess-Datei, die nur umgeleitet wird

RewriteOptions inherit
Options FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Redirect 301 /this/old/path/file.pdf /this/new/path#abc
</IfModule>

Und verwenden Sie RewriteRule

RewriteOptions inherit
Options FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{HTTP_HOST} ^mydomain.com$
RewriteRule /this/old/path/file.pdf /this/new/path#abc [NE,R=301]
</IfModule>

Dies macht keine Weiterleitung

Ich weiß nicht, ob das wichtig ist, aber ich verwende CPanel.


Lösung des Problems

Die RedirectDirektive (mod_alias) wird nach den RewriteRuleDirektiven mod_rewrite angewendet, sodass Sie die Abfragezeichenfolge sehen, die von der früheren RewriteRuleinternen Umschreibung angewendet wurde. Sie haben im Grunde einen Konflikt zwischen mod_alias und mod_rewrite.

Sie müssen RewriteRulestattdessen eine mod_rewrite-Direktive vor Ihren bestehenden Regeln direkt nach der RewriteEngineDirektive verwenden. Nicht am Ende. Die Reihenfolge ist wichtig.

Zum Beispiel:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^this/old/path/file\.pdf$ /this/new/path#abc [NE,R=301,L]

Beachten Sie, dass der durch das RewriteRule Muster übereinstimmende URL-Pfad nicht mit einem Schrägstrich beginnt. Das erste Argument der RewriteRuleDirektive (das Muster ) ist eine Regex, daher müssen die erforderlichen Fluchtzeichen und Anker angewendet werden.

Die Bedingung, die die Servervariable prüft HTTP_HOST, ist erforderlich, wenn diese Regel nur für die angegebene Domäne gelten soll.

Das NEFlag ist erforderlich, um zu verhindern, dass das #Zeichen in der Antwort URL-codiert wird (was seine Bedeutung als Trennzeichen für die Fragmentkennung negiert).

Vor dem Testen müssen Sie Ihren Browser-Cache löschen. Und testen Sie zuerst mit 302 (temporärer) Umleitung, um potenzielle Caching-Probleme zu vermeiden.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...