这是我的目录结构:
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页面而不是重定向太多?
答案 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