In derselben Domäne möchte ich eine 301-Umleitung von /this/old/path/file.pdf
nach 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 Redirect
Direktive (mod_alias) wird nach den RewriteRule
Direktiven mod_rewrite angewendet, sodass Sie die Abfragezeichenfolge sehen, die von der früheren RewriteRule
internen Umschreibung angewendet wurde. Sie haben im Grunde einen Konflikt zwischen mod_alias und mod_rewrite.
Sie müssen RewriteRule
stattdessen eine mod_rewrite-Direktive vor Ihren bestehenden Regeln direkt nach der RewriteEngine
Direktive 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 RewriteRule
Direktive (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 NE
Flag 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