1

我应该转换仍然留在我的 htaccess 文件中的几个 Redirect 301 规则,因为有人告诉我最好不要在同一个文件中混合 Redirect 和 Mod Rewrite 规则。

Redirect 301 /bar.php http://www.foo.com/abc/bar.php 
RedirectMatch 301 ^/(bar(?!bapapa\.)[^/.]+\.php)$ http://www.foo.com/abc/$1
  1. 将每次访问重定向到/bar.php子文件夹 abc 中的同一文件
  2. /bar将对以(不包括)开头的 php 文件的每次访问重定向到/barbapapa.php子文件夹 abc 中的相同文件

我无法转换这两个规则。至于第一条规则,我尝试过:

RewriteRule ^bar.php$ "http://www.foo.com/abc/bar.php" [R=301]

我正确地从/bar.phpto重定向/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
4

1 回答 1

1

您可以使用以下代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} !^[A-Z]{3,}\s/+abc/ [NC]
RewriteRule ^(bar(?!bapapa\.)[^/.]*\.php)$ /abc/$1 [L,NC,R=302]
于 2013-09-27T09:40:44.663 回答