RewriteCond
とRewriteRule
を含む.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ホスティングを使用しています。
あなたの場合、問題が何であるかわかりません(スニペットをテストし、期待どおりに機能します)。
RewriteEngine On
RewriteRule ^foo$ /redirect.html [redirect=temp,last]
私は.htaccessの専門家ではありませんが、RewriteRule
パターンが処理されるため、これはさらに高速になると思いますbeforeRewriteCond
。
解決策を発見しました!これはGoDaddyの特別なもののようです。
GoDaddyのドメインはサブフォルダーに保持されます。例えばmydomain.com
は、md
というサブフォルダーに保持される場合があります。
奇妙なことに、%{REQUEST_URI}
の先頭にはこの文字列が含まれています。したがって、私のRewriteCondは次のようになっているはずです。
RewriteCond %{REQUEST_URI} ^/md/foo$
文字列が必ずしも先頭から始まるとは限らない場合は必要ありません。これは私の奇妙な結果を説明しています。
タイトルを編集して、これがGoDaddyに特に当てはまることを示し、他の人の助けになることを期待しています。