mod_rewrite:重定向以“/video/[anyfilename].mp4”结尾的所有网址

时间:2013-11-26 15:51:53

标签: regex .htaccess mod-rewrite

很抱歉这可能是非常棒的问题,但我无法让它发挥作用。

这是我当前的.htacces文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteRule ^_res/.*$ - [L] # all URLs beginning with "_res" are not changed.

# put new fancy rule doing what I want here...

RewriteRule . index.php [L] # all other URLs are redirected to index.php

</IfModule>

这很好用。它将除了以“_res /”开头的所有网址重定向到index.php。

我现在需要的是所有匹配“[anypath] / video / [anyfilename] .mp4”的网址都会被重写为“content / [anypath] / video / [anyfilename] .mp4”(这是实际的路径)这个文件在服务器上 - 我不能在这个共享的Web空间上使用x-sendfile,因此我需要将大文件URL重写到它们的实际服务器位置,以避免php的文件读取功能。)

根据我对这些RewriteRules的理解,我认为我必须在最后一条规则之前放置此规则。

不幸的是,我的正则表达式专业知识几乎不存在。

我认为应该是这样的:

RewriteRule ^(.*)/video/(^/*)\.mp4$ content/$1/video/$2.mp4 [L]

正则表达式应表示“以任意数量的任何字符开头,后跟”/ video /“,后跟任何数量的非”/“且以”.mp4“结尾的字符。

当我在最后一条规则之前将其插入我的.htaccess时,以“/video/myvid.mp4”结尾的网址仍会被重写为index.php。

你看我一无所知。有什么建议吗?

提前多多谢谢!

1 个答案:

答案 0 :(得分:1)

我想你想要:

RewriteCond %{REQUEST_URI} !^/content/
RewriteRule ^(.*)/video/([^/]+)\.mp4$ content/$1/video/$2.mp4 [L]

并且您希望将此规则添加到路由到index.php

的规则之上