我的情况是不再需要整个文件夹的内容,并且会被重定向到主页,除了6个左右的文件。该文件夹可容纳300多个文件,因此个人重定向:
redirect 301 /folder/file.html http://www.domain.tld/
redirect 301 /folder/file2.html http://www.domain.tld/
redirect 301 /folder/file3.html http://www.domain.tld/
这需要相当长的时间。我有一些时间需要这样做,并想知道是否有人知道一个很好的方法来实现这一点,通过使用一个与mod_rewrite的小正则表达式。
为了让所有可能使用潜在正确答案的人达到最佳理解,我们可以说我们不想重定向的文件是:
/folder/stay1.html
/folder/stay2.html
/folder/stay3.html
提前感谢这个知识渊博的社区,帮助我们这些仍然需要学习的东西!
修改的
是否可以实现此目的并保留文件夹的基本网址?
/folder/
/folder/index.html
我尝试了以下但没有成功:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder(/|/index.html|/stay1.html|/stay2.html|/stay3.html|/etc.html)
RewriteRule ^/?folder/ http://www.domain.tld/ [L,R=301]
编辑正确答案
非常感谢Jon Lin获得答案。
重定向/folder/
除{1}之外的所有文件的正确方法仍然允许访问/folder/
:
RewriteEngine On
# Allow /folder/ to remain accessible
RewriteCond %{REQUEST_URI} !^/folder/$
# Allow specified files to remain accessible
RewriteCond %{REQUEST_URI} !^/folder/(index.html|stay1.html|stay2.html|stay3.html|etc.html)
# Redirect all non-specified files to home page
RewriteRule ^/?folder/(.+)$ http://www.domain.tld/ [L,R=301]
答案 0 :(得分:2)
使用mod_rewrite,您可以为重定向创建异常条件,尝试将这些规则放在文档根目录中的htaccess文件中:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder/$
RewriteCond %{REQUEST_URI} !^/folder/(index.html|stay1.html|stay2.html|stay3.html|etc.html)
RewriteRule ^/?folder/(.+)$ http://www.domain.tld/ [L,R=301]
所以列表中的任何内容:(stay1.html|stay2.html|stay3.html|etc.html)
都会使条件失败,重定向也不会发生。否则,以/folder/
开头的任何内容都将重定向到http://www.domain.tld/
。
请注意,如果您将mod_alias重定向混合,则它们可能会相互干扰。
答案 1 :(得分:1)
您可以将RedirectMatch与negative lookahead一起使用,例如:
RedirectMatch permanent ^/?folder/(?!(stay1\.html|stay2\.html|stay3\.html)) http://domain.tld
另一种mod-rewrite解决方案是这样的:
RewriteRule ^/?folder/(stay1\.html|stay2\.html|stay3\.html)$ - [L]
RewriteRule ^/?folder/.* http://domain.tld
第一个规则捕获所有异常,L标志确保在此过程中不再进行进一步处理,-
指示引擎不要重写,确保不再进行传递。第一条规则未捕获的任何内容都会被第二条规则重定向。