web-dev-qa-db-ja.com

さまざまなhtaccessリダイレクトの実行順序

私が何を検索しても、なぜこの問題が発生し続けるのか理解できず、何らかの理由でそれがどのように機能するかについての良い説明を見つけることができないようです。また、このクエストが以前に尋ねられたのに申し訳ありませんが、私は2日間答えを探していて、答えを見つけることができません。 (おそらく間違ったキーワードを検索する)

しかし。

現在、RedirectおよびRewriteRule関数を使用するリダイレクトに関して問題があります。

コンテキストは次のとおりです。

私が働いている会社は最近、サーバーとデザインからウェブサイトを移行および更新しました。もちろん、これはもう利用できないページやリダイレクトが必要なURLがあることを意味します。

最初に問題が発生したのは、すべてのリダイレクトを調べて、一部のリダイレクトが本来あるべきページに移動しないことに気づいたときです。

以下は、問題を与えている.htaccessファイルの一部です。行は、私の.htaccessと同じ順序になっています。

<IfModule mod_rewrite.c>
RewriteEngine On

Redirect 301 /nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad [https domainname]/nieuws
Redirect 301 /nieuws/145/Artikel-Telegraaf-Vertraging [https domainname]/nieuws
Redirect 301 /nieuws/145/Artikel-Telegraaf:-Vertraging.html [https domainname]/nieuws
Redirect 301 /nieuws/108/Wie-gaat-nu-via-(reis)verzekeraars-werken-`Reisagenten-kunnen-klanten-ook-verwijzen` [https domainname]/blog/euclaim-gaat-nu-via-reis-verzekeraars-werken
Redirect 301 /nieuws/136/Technisch-mankement-geen-overmacht.html [https domainname]/blog/technisch-mankement-geen-overmacht

RewriteRule ^nieuws/([1-9]|[1-9][0-9]|[1-9][0-9][0-9]||[1-9][0-9][0-9][0-9])/.*$ /nieuws [R=301,NC,L]

問題は、/nieuws/136/Technisch-mankement-geen-overmacht.htmlに移動すると/nieuwsにリダイレクトされることです。

問題

今の問題は、htaccessのどの部分がこれを引き起こしているのかわからないということではなく、これをどうしてどうすれば解決できるかということです。

RewriteRuleはURLを取得して/nieuwsにリダイレクトしますが、どこに配置しても問題ありません。上の例のように、リダイレクトの直後の上部、下部、RewriteRuleを配置しようとしましたが、RewriteRuleが最優先されるのを止めるものは何もありません。

これは通常の動作ですか、ここで何か間違っていますか?

さらに情報が必要な場合はお知らせください。

5
Controvi

Redirectはmod_aliasに属しますが、RewriteRuleはmod_rewriteディレクティブです。 2つの異なるモジュール。異なるモジュールは、リクエスト中に独立して異なる時間に実行されます。

カスタマイズされたApacheサーバーがない場合、Apache構成ファイル内のディレクティブの順序(例:.htaccess)にもかかわらず、mod_rewriteは常にbefore mod_aliasを実行します。

一般に、リダイレクト(および/またはURL書き換え)にmod_rewriteを使用している場合、そのような競合を避けるために、すべてのリダイレクトにmod_rewriteを使用する必要があります。

301がブラウザによってハードにキャッシュされるため、テストの前に中間キャッシュがクリアされていることを確認する必要があることに注意してください。


Redirect 301 /nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad [https domainname]/nieuws

例として、Redirectプレフィックス一致であるため、同等のRewriteRuleディレクティブは次のようになります。

RewriteRule ^nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad(.*) https://example.com/nieuws$1 [R=301,L]

ただし、これが完全に一致することを意図している場合:

RewriteRule ^nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad$ https://example.com/nieuws [R=301,L]
6
MrWhite