2013-11-26 73 views
2

對不起,這可能是非常小巧的風格的問題,但我不能讓它工作。mod_rewrite:重定向以「/video/[anyfilename].mp4」結尾的所有網址

這是我目前的.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」的URL都會被重寫爲「content/[anypath]/video/[anyfilename] .mp4」(這是實際的這個文件在服務器上的路徑 - 我不能在這個共享的網絡空間上使用x-sendfile,因此我需要將大文件URL重寫到它們的實際服務器位置,以避免php的文件讀取功能)。

從我對這些RewriteRules的理解中,我想我必須將這條規則放在最後一條之前。

不幸的是,我的正則表達式專業知識實際上並不存在。

我認爲應該工作是這樣的:

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

的正則表達式應該意味着/視頻/‘然後是不屬於任何字符的任意量「與任何字符的任意金額,然後開始’ 「/」,並與名爲」 .mp4" 結尾。

當我最後的規則之前正確插入到這一點我的.htaccess,網址以‘/video/myvid.mp4’結尾仍重寫的index.php。

你看我無言以對呢?

非常感謝!

+1

'(^/*)'並不意味着'比其他任何字符/ '。爲此,你的意思是做'([^ /] *)' –

+0

謝謝,正則表達式讓我的腦海似乎有點過度... – Robert

回答

1

我想你想:

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

而且你要添加的一個高於這個規則路線index.php

+0

謝謝!這工作!但我也必須把你的RewriteCond直接放在我的.htaccess中的最後一條規則之前(將所有內容路由到index.php)。再次感謝! – Robert

相關問題