mod_rewrite重定向循环

时间:2012-02-04 22:42:55

标签: apache .htaccess mod-rewrite

这是我的目录结构:

http://files.example.com/files/

所有文件都位于files /目录

我希望URL为http://files.example.com/somefile.txt,即使somefile.txt位于files /目录中。

这是我的.htaccess文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ files/$1

如果有人请求http://files.example.com/somefile.txt并且somefile.txt在files /目录中,那么一切正常。

但是,如果somefile.txt不存在,则会导致内部服务器错误(500),重定向过多。

如果指定的文件不存在,如何将用户发送到404页面?

示例:转到http://files.example.com/a-file-that-does-not-exist.txt 将重定向到自定义404页面而不是重定向太多?

3 个答案:

答案 0 :(得分:2)

这有效!

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/files/%{REQUEST_URI} -f
RewriteRule ^(.*)$ files/$1

答案 1 :(得分:1)

尝试:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/files/
RewriteRule ^(.*)$ /files/$1 [L]

如果/ files /中不存在该文件,请让重写处理404,这意味着您不需要!-d和!-f检查。

答案 2 :(得分:0)

怎么样?
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond files/%{REQUEST_FILENAME} -f
RewriteRule !^files/(.*)$ files/$1