2017-10-23 13 views
0

これは非常に奇妙です。Apache mod_rewriteはRewriteRuleを無視しますか?

私は同じクライアント用に2つのサイトを持っています。特定のページが両方のサイトに存在し、2つのコピーを保持する必要がないので、サイトAのこれらのURLをサイトBの対応するサイトにリダイレクトするようApacheに指示しました。

私は次のディレクティブをmy .htaccessファイル:

RewriteRule ^/?$ https://www.site-b.example.com/ [R=301,QSA,L] 
RewriteRule ^privacy/?$ https://www.site-b.example.com/privacy-policy/ [R=301,QSA,L] 
RewriteRule ^terms/?$ https://www.site-b.example.com/terms-conditions/ [R=301,QSA,L] 
RewriteRule ^userguide/?$ https://www.site-b.example.com/user-guide/ [R=301,QSA,L] 
RewriteRule ^abcdefg/?$ https://www.site-b.example.com/user-guide/ [R=301,QSA,L] 

(私はそれがそのようにする必要があり言えば十分、私はここであなたを退屈しません正当な理由のために代わりmod_aliasのリダイレクト/に、RedirectMatchのmod_rewriteの者のRewriteRuleを使用しています。)

奇妙なことは、これらのすべてが^userguide/?$以外のものです。私はhttps://www.site-a.example.com/に行くとき

  • 私はhttps://www.site-b.example.com/
  • 私はhttpsに行くにリダイレクト://www.site-a.example.com/privacy https://www.site-b.example.com/privacy-policyにリダイレクトされます
  • https://www.site- a.example.com/terms https://www.site-b.example.com/terms-conditionsにリダイレクトされます
  • https://www.site-a.example.com/userguideにアクセスすると、リダイレクトはありません!
  • 私は私が

何をhttps://www.site-b.example.com/user-guideにリダイレクトhttps://www.site-a.example.com/abcdefgに行くとき一体何が起こっているの? "userguide"はmod_rewriteの予約語ですか?

+1

ページ 'userguide.php'またはディレクトリ' userguide'がありますか?それは他の人にとって同じですか? – Croises

+1

ありがとう@Croises - はいそれはuserguide.htmlでした。私はmod_rewriteディレクティブの優先順位を誤解していたに違いない - configのどこかに、既存のファイルとディレクトリがさらに書き直し/リダイレクトされないというルールがありますが、私のルールは最初に処理されると思いました。ないと思います!答えとしてあなたのコメントを追加する場合は、私はそれに感謝&upvoteを与えることができます:) –

答えて

1

のMultiViews無効にする(上)それを追加します。

を サーバが/いくつかの要求を受信した場合:有効にするとMultiViewsオプションは、何をするかを説明し、

Options -MultiViews 

Apache docs on mod_negotiationを/ dir/fooと/ some/dir/fooが存在しない場合、サーバは foo。*という名前のすべてのファイルを検索するディレクトリを読み込み、実際にすべてのファイルに名前を付けるタイプマップを作成します。これらのメディアには同じメディアタイプとコンテンツエンコーディングがあります。クライアントがその名前の1つを要求した場合は、 が持っています。それから がクライアントの要件に最も適したものを選択し、 というドキュメントを返します。

もう1つの可能性は、userguide.htmlファイルが実際にはもう使用されていない場合は削除することです。

関連する問題