6

I have a folder named "folder1" in my root directory

www.domain.com/ www.domain.com/folder1

I need to redirect all the requests to www.domain.com that turn up to be a 404 error, to folder1. Like so:

www.domain.com/a_file.txt

If a_file.txt doesn't exist, look in folder1:

www.domain.com/folder1/a_file.txt

I want this to work the same for subdirectories, like so:

www.domain.com/a_folder (redirect if it doesn't exist in the root)

www.domain.com/folder1/a_folder

I know I should use RewriteCond %{REQUEST_FILE} !-f but I can't seem to figure it out.

4

1 回答 1

18
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) folder1/$1 [L,R]
  • 第一个 rewrite-cond 确保您不会循环(以防文件在 folder1 中也不存在
  • 第二个检查目标不是文件
  • 第三个 - 它也不是文件夹
  • 最后,重写 url。Lflag 表示这是应用的最后一条规则(即使它之后有规则),R表示重定向。QSA如果您希望将传递给原始的任何查询字符串参数发送到新 url,您还可以添加标志
于 2012-06-18T07:56:47.713 回答