在重定向之前检查修改的URI是否存在

时间:2015-10-08 09:26:18

标签: apache .htaccess mod-rewrite

我正在将网站移动到子目录,因为我已将其重新制作。

它被移动到名为old /的目录。我想建立一个规则,如果一个文件不存在(即有人试图访问已经移动到旧文件的文件),那么我会在重定向之前检查它是否存在于旧文件中。 / p>

这是我到目前为止所做的:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/old%{REQUEST_URI} -f #doesnt work
RewriteRule ^(.*)$ /foo/bar/old/$1

我的问题是我在共享服务器上,而我的网站在子目录中(foo / bar / here)。因此,对于示例文件baz.php,我的文档根目录是/ home / www / htdocs /,而request_uri是/foo/bar/baz.php。

在上面的示例中,我目前正在检查/home/www/htdocs/old/foo/bar/baz.php是否存在。哪个错了。我需要查看/home/www/htdocs/foo/bar/old/baz.php。

无论如何我能做到吗?

1 个答案:

答案 0 :(得分:1)

您需要在-f检查中使用完整路径,在DocumentRoot/foo/bar/.htaccess中使用此.htaccess:

RewriteEngine On
RewriteBase /foo/bar/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/foo/bar/old/$1 -f
RewriteRule ^(.*)$ old/$1 [L]