同じファイルに Redirect ルールと Mod Rewrite ルールを混在させない方がよいと言われたので、まだ htaccess ファイルに残っている Redirect 301 ルールをいくつか変換する必要があります。
Redirect 301 /bar.php http://www.foo.com/abc/bar.php
RedirectMatch 301 ^/(bar(?!bapapa\.)[^/.]+\.php)$ http://www.foo.com/abc/$1
/bar.php
へのすべてのアクセスを、サブフォルダー abc 内の同じファイルにリダイレクトします/bar
( を除く)で始まる php ファイルへのすべてのアクセスを/barbapapa.php
、サブフォルダー abc 内の同じファイルにリダイレクトします。
両方のルールを変換できませんでした。最初のルールについては、次のようにしてみました。
RewriteRule ^bar.php$ "http://www.foo.com/abc/bar.php" [R=301]
/bar.php
からに正しくリダイレクトされ/abc/bar.php
ますが、ページの代わりに、サーバーがリクエストを完了できない方法でリダイレクトしていることを示すブラウザ メッセージ (Firefox) が表示されます。ヒントはありますか?ありがとう
編集: /abc/.htaccess の内容
RewriteEngine On
#inherit from root htaccess and append at last
RewriteOptions inherit
#disable hotlinking but allow image bots
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?foo.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !images.google\.
RewriteCond %{HTTP_REFERER} !yahoo\.
RewriteCond %{HTTP_REFERER} !bing\.
RewriteCond %{HTTP_REFERER} !msn\.
RewriteCond %{HTTP_REFERER} !ask\.
RewriteCond %{HTTP_REFERER} !arianna\.
RewriteCond %{HTTP_REFERER} !yandex\.
RewriteCond %{HTTP_REFERER} !babylon\.
RewriteCond %{HTTP_REFERER} !virgilio\.
RewriteCond %{HTTP_REFERER} !avg\.
RewriteCond %{HTTP_REFERER} !delta-search.com\.
RewriteCond %{HTTP_REFERER} !images.search.conduit.com\.
RewriteCond %{HTTP_REFERER} !search.findeer.com\.
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !search\/cache [NC]
RewriteCond %{HTTP_REFERER} !cache [NC]
RewriteRule \.(jpe?g|png|gif)$ - [NC,F]
#rename old gif maps to png
Options +FollowSymLinks
RewriteRule ^([^.]+)\.gif$ http://www.foo.com/abc/$1.png [L,R=301]
Options -Indexes