WordPress HTAccess正在劫持我的.mp4文件

时间:2011-07-01 作者:shawn

我正在运行wordpress 3.2rc2多站点。

我插入了一些。mp4视频进入我的域的根目录,以便我可以使用jw播放器运行一些基本测试。

当我尝试访问的url时。mp4视频,我不知何故最终得到了wordpress 404页面。这也会导致jw播放器内部出现错误,称未找到文件或访问被拒绝。mp4文件的权限为644,所有者/组正确。

为什么会发生这种情况?我该如何修复它,以便wordpress不再干扰我的mp4文件?

另外:有人可以添加mp4标签吗,我还没有足够的代表来做这件事。

这是我的htaccess文件:

RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\\.php)$ $2 [L]
RewriteRule . index.php [L]

AddType video/ogg  .ogv
AddType video/mp4  .mp4
AddType video/webm .webm
Edit如果我使用wordpress媒体上传器,那么我可以很好地访问mp4视频。我只是不能把它们放在服务器上的任何其他地方,这是一个问题。

有人对wordpress为什么在其他目录中甚至在根目录中使用我的MP4有进一步的想法吗?

2 个回复
最合适的回答,由SO网友:Chris_O 整理而成

缺少的mime类型不应导致404页,但需要包装AddType<IfModule mod_mime.c> 标签。

<IfModule mod_mime.c>
    AddType video/mp4 .mp4 .m4v
    AddType video/mpeg .mpeg .mpg .mpe
    AddType video/asf .asf .asx .wax .wmv .wmx
    AddType video/avi .avi
    AddType video/quicktime .mov .qt
    AddType audio/ogg .ogg
</IfModule>
我在多站点上运行jw player,我必须使用绝对URL来访问播放器和文件。我在我的站点根目录中创建了一个包含播放器和文件的文件夹,然后编写了一个函数来显示视频,并使用wp\\u enqueue\\u脚本将swfobject排队。

 add_action( \'template_redirect\', \'load_swf_object\' );
 function load_swf_object() {
    wp_enqueue_script(\'swf_object\', \'/jw/swfobject.js\');
}

function c3m_play_the_video() {  
 echo "<div id=\'front-vid\'>
        <div id=\'videospace\'>This text will be replaced</div>
        <script type=\'text/javascript\'>
      var so = new SWFObject(\'http://example.com/jw/player.swf\',\'mpl\',\'520\',\'350\',\'9\');
      so.addParam(\'allowfullscreen\',\'true\');
      so.addParam(\'allowscriptaccess\',\'always\');
      so.addParam(\'wmode\',\'opaque\');
      so.addVariable(\'file\',\'http://example.com/jw/video/video_name.mp4\');
      so.addVariable(\'image\',\'http://example.com/jw/video/video-face.jpg\');
      so.addVariable(\'skin\',\'http://example.com/jw/skins/glow.zip\');
      so.addVariable(\'bufferlength\',\'3\');
      so.write(\'videospace\');
      </script>
        </div>";
}

SO网友:Otto

文件名的大小写是否正确?

这些规则基本上是说,如果文件存在,则提供它,而不是继续执行WordPress规则:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
也就是说,如果请求的文件是一个存在的文件,或者它是一个存在的目录,则不重写,并停止处理([L]=最后一条规则)。

因此,您一定是以某种方式将文件名弄错了,因为如果该文件以给定的名称存在,则此规则会强制它正确地提供该文件。

结束