web-dev-qa-db-ja.com

GoDaddy:.htaccessのRewriteCondが「行頭」で機能しない(^)

RewriteCondRewriteRuleを含む.htaccessがあります。

以前は正常に機能していました(最後に確認してから長い時間がかかりました)が、現在は機能しなくなりました。次の例に絞り込みました。

www.mydomain.com/fooをリダイレクトしたいが、fooが他の場所にある場合はリダイレクトしないとします。そのため、たとえば、URIが/abc/foo/abcfoo、または/foobarの場合、リダイレクトしないでください。

現在の.htaccessファイルは次のとおりです。

Options -Indexes +FollowSymLinks -Multiviews

RewriteEngine On

RewriteCond  %{REQUEST_URI}  ^/foo$
RewriteRule  .  /redirect.html  [last,redirect=temp]

^/foo$をさまざまな方法で変更しようとしましたが、これを機能させることができません。

以下はすべて期待どおりに機能します。

foo         Redirects wherever foo appears, e.g. /abcfoobar
foo$        Redirects whenever foo appears at the end, e.g. /abc/defoo
/foo        Redirects whenever /foo appears, e.g. /abc/foobar
/foo$       Redirects whenever /foo appears at the end, e.g. /abc/foo

以下は、URIとして何を指定しても、常に404 Not foundを返します。

^foo
^/foo
^/foo$

何が起こっているのか分かりません。

これを修正するのを手伝ってください。役立つ場合は、GoDaddyホスティングを使用しています。

4
Paddy Landau

あなたの場合、問題が何であるかわかりません(スニペットをテストし、期待どおりに機能します)。

RewriteEngine On
RewriteRule ^foo$ /redirect.html [redirect=temp,last]

私は.htaccessの専門家ではありませんが、RewriteRuleパターンが処理されるため、これはさらに高速になると思いますbeforeRewriteCond

4
unor

解決策を発見しました!これはGoDaddyの特別なもののようです。

GoDaddyのドメインはサブフォルダーに保持されます。例えばmydomain.comは、mdというサブフォルダーに保持される場合があります。

奇妙なことに、%{REQUEST_URI}の先頭にはこの文字列が含まれています。したがって、私のRewriteCondは次のようになっているはずです。

RewriteCond  %{REQUEST_URI}  ^/md/foo$

文字列が必ずしも先頭から始まるとは限らない場合は必要ありません。これは私の奇妙な結果を説明しています。

タイトルを編集して、これがGoDaddyに特に当てはまることを示し、他の人の助けになることを期待しています。

3
Paddy Landau