无法在 drupal 中访问上传的文件(flv 和图像)
我有一个自定义上传字段,其内容类型允许上传 flv 文件。我的主题中有 jw 播放器,它可以为我播放它。在我的本地主机中一切正常。 但上传后显示访问被拒绝或文件未找到错误。
我检查了文件夹的权限,似乎没问题。直接键入文件的链接也会返回找不到页面。
问题是什么?可以做什么? 我尝试使用 print $base_url
尝试使用绝对 url,也尝试使用 print $base_path
,这两种方法在本地主机中都工作得很好。
更新:甚至 image_cache 的缩略图或任何上传的图像都无法访问。这有点奇怪。我无法弄清楚这一点。
.htacess 在本地主机和服务器中是相同的。但为什么只有在服务器上我无法访问?我查了一下 日志及其显示所有尝试的 pagenotfound 错误。
我的.htaccess文件:
> #
> # Apache/PHP/Drupal settings:
> #
> # Protect files and directories from prying eyes. <FilesMatch
> "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
> Order allow,deny </FilesMatch>
> # Don't show directory listings for URLs which map to a directory. Options
> -Indexes
>
>
>
> # Make Drupal handle any 404 errors. ErrorDocument 404 /index.php
>
> # Force simple error message for requests for non-existent favicon.ico.
> <Files favicon.ico> # There is no
> end quote below, for compatibility
> with Apache 1.3. ErrorDocument 404
> "The requested file favicon.ico was
> not found. </Files>
>
> # Set the default handler. DirectoryIndex index.php
>
> # Override PHP settings. More in sites/default/settings.php
> # but the following cannot be changed at runtime.
>
> # PHP 4, Apache 1. <IfModule mod_php4.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # PHP 4, Apache 2. <IfModule sapi_apache2.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # PHP 5, Apache 1 and 2. <IfModule mod_php5.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # Requires mod_expires to be enabled. <IfModule mod_expires.c> # Enable
> expirations. ExpiresActive On
>
> # Cache all files for 2 weeks after
> access (A). ExpiresDefault A1209600
>
> <FilesMatch \.php$>
> # Do not allow PHP scripts to be cached unless they explicitly send
> cache
> # headers themselves. Otherwise all scripts would have to overwrite
> the
> # headers set by mod_expires if they want another caching behavior.
> This may
> # fail if an error occurs early in the bootstrap process, and it may
> cause
> # problems if a non-Drupal PHP file is installed in a subdirectory.
> ExpiresActive Off </FilesMatch> </IfModule>
>
> # Various rewrite rules. <IfModule mod_rewrite.c> RewriteEngine on
>
> # If your site can be accessed both
> with and without the 'www.' prefix,
> you # can use one of the following
> settings to redirect users to your
> preferred # URL, either WITH or
> WITHOUT the 'www.' prefix. Choose ONLY
> one option: # # To redirect all
> users to access the site WITH the
> 'www.' prefix, #
> (http://example.com/... will be
> redirected to
> http://www.example.com/...) # adapt
> and uncomment the following: #
> RewriteCond %{HTTP_HOST}
> ^example\.com$ [NC] # RewriteRule
> ^(.*)$ http://www.example.com/$1
> [L,R=301] # # To redirect all
> users to access the site WITHOUT the
> 'www.' prefix, #
> (http://www.example.com/... will be
> redirected to http://example.com/...)
> # uncomment and adapt the following: # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] #
> RewriteRule ^(.*)$
> http://example.com/$1 [L,R=301]
>
> # Modify the RewriteBase if you are
> using Drupal in a subdirectory or in a
> # VirtualDocumentRoot and the rewrite rules are not working properly. #
> For example if your site is at
> http://example.com/drupal uncomment
> and # modify the following line: #
> RewriteBase /drupal # # If your
> site is running in a
> VirtualDocumentRoot at
> http://example.com/, # uncomment the
> following line: # RewriteBase /
>
> # Rewrite URLs of the form 'x' to
> the form 'index.php?q=x'.
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteCond %{REQUEST_FILENAME} !-d
> RewriteCond %{REQUEST_URI}
> !=/favicon.ico RewriteRule ^(.*)$
> index.php?q=$1 [L,QSA] </IfModule>
>
> # $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $
文件目录中的.htacess:
> SetHandler
> Drupal_Security_Do_Not_Remove_See_SA_2006_006
> Options None Options -FollowSymLinks
I have a custom upload field with a content type which allows to upload flv files. And I have jw player in my theme which plays it for me. Everything works fine in my localhost.
But after uploading it show Access Denied or File not found Error.
I checked the permission of files folder, it seems to be ok. Directly typing the link to the file also returns page not found.
What is the problem? What can be done?
I tried with absolute url using print $base_url
and also tried with print $base_path
both of which work really well in localhost.
Update: even the thumbnail of image_cache or any uploaded images are not accessible. This is kind of weird. I cant figure this out.
.htacess is same in localhost and server. But why only in server I cant access? I checked
the log and its show pagenotfound error for all attempts.
My .htaccess file :
> #
> # Apache/PHP/Drupal settings:
> #
> # Protect files and directories from prying eyes. <FilesMatch
> "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
> Order allow,deny </FilesMatch>
> # Don't show directory listings for URLs which map to a directory. Options
> -Indexes
>
>
>
> # Make Drupal handle any 404 errors. ErrorDocument 404 /index.php
>
> # Force simple error message for requests for non-existent favicon.ico.
> <Files favicon.ico> # There is no
> end quote below, for compatibility
> with Apache 1.3. ErrorDocument 404
> "The requested file favicon.ico was
> not found. </Files>
>
> # Set the default handler. DirectoryIndex index.php
>
> # Override PHP settings. More in sites/default/settings.php
> # but the following cannot be changed at runtime.
>
> # PHP 4, Apache 1. <IfModule mod_php4.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # PHP 4, Apache 2. <IfModule sapi_apache2.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # PHP 5, Apache 1 and 2. <IfModule mod_php5.c> php_value
> magic_quotes_gpc 0
> php_value register_globals
> 0 php_value session.auto_start
> 0 php_value mbstring.http_input
> pass php_value mbstring.http_output
> pass php_value
> mbstring.encoding_translation 0
> </IfModule>
>
> # Requires mod_expires to be enabled. <IfModule mod_expires.c> # Enable
> expirations. ExpiresActive On
>
> # Cache all files for 2 weeks after
> access (A). ExpiresDefault A1209600
>
> <FilesMatch \.phpgt;
> # Do not allow PHP scripts to be cached unless they explicitly send
> cache
> # headers themselves. Otherwise all scripts would have to overwrite
> the
> # headers set by mod_expires if they want another caching behavior.
> This may
> # fail if an error occurs early in the bootstrap process, and it may
> cause
> # problems if a non-Drupal PHP file is installed in a subdirectory.
> ExpiresActive Off </FilesMatch> </IfModule>
>
> # Various rewrite rules. <IfModule mod_rewrite.c> RewriteEngine on
>
> # If your site can be accessed both
> with and without the 'www.' prefix,
> you # can use one of the following
> settings to redirect users to your
> preferred # URL, either WITH or
> WITHOUT the 'www.' prefix. Choose ONLY
> one option: # # To redirect all
> users to access the site WITH the
> 'www.' prefix, #
> (http://example.com/... will be
> redirected to
> http://www.example.com/...) # adapt
> and uncomment the following: #
> RewriteCond %{HTTP_HOST}
> ^example\.com$ [NC] # RewriteRule
> ^(.*)$ http://www.example.com/$1
> [L,R=301] # # To redirect all
> users to access the site WITHOUT the
> 'www.' prefix, #
> (http://www.example.com/... will be
> redirected to http://example.com/...)
> # uncomment and adapt the following: # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] #
> RewriteRule ^(.*)$
> http://example.com/$1 [L,R=301]
>
> # Modify the RewriteBase if you are
> using Drupal in a subdirectory or in a
> # VirtualDocumentRoot and the rewrite rules are not working properly. #
> For example if your site is at
> http://example.com/drupal uncomment
> and # modify the following line: #
> RewriteBase /drupal # # If your
> site is running in a
> VirtualDocumentRoot at
> http://example.com/, # uncomment the
> following line: # RewriteBase /
>
> # Rewrite URLs of the form 'x' to
> the form 'index.php?q=x'.
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteCond %{REQUEST_FILENAME} !-d
> RewriteCond %{REQUEST_URI}
> !=/favicon.ico RewriteRule ^(.*)$
> index.php?q=$1 [L,QSA] </IfModule>
>
> # $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $
.htacess in the file directory:
> SetHandler
> Drupal_Security_Do_Not_Remove_See_SA_2006_006
> Options None Options -FollowSymLinks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
检查并确保您已将 .htaccess 文件上传到 Drupal 的根目录。
您的网站是在域的根目录还是子目录中运行?如果它位于子目录中,您可能需要在 .htaccess 文件中设置 RewriteBase。
检查管理>报告>状态报告页面可查看是否有任何错误消息。
检查管理>报告>最近的日志条目是否有任何其他错误。
Check to make sure you uploaded the .htaccess file to Drupal's root directory.
Is your site running at the root of the domain or in a subdirectory? If it's in a subdirectory, you may need to set RewriteBase in the .htaccess file.
Check the Admin > Reports > Status reports page to see if there are any error messages.
Check the Admin > Reports > Recent log entries for any additional errors.
您的文件目录中应该有另一个 htaccess。该文件中设置的任何权限都将覆盖在根级别设置的权限。作为替代方案,您可以设置 Drupal 来处理您的文件(私有文件系统选项)。请注意,将文件设置为私有会对性能产生影响。
There should be another htaccess in your files directory. Any permissions set in this file will override those set at the root level. As an alternative you could set Drupal to handle your files (the private filesystem option). Be aware that setting files to private will have a performance impact.
除了上述之外,将 /sites/default 目录权限设置为 555 应该可以修复 404 或 403。
我也错过了这一点
In addition to the above Setting the /sites/default directory permission to 555 should fixed it either 404 or 403.
I missed that too