Robert
Robert

Reputation: 247

mod_rewrite: Redirect all urls ending with "/video/[anyfilename].mp4"

Sorry for this probably very noob-style question, but I just can't get it to work.

Here's my current .htacces file:

<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>

This works fine. It's redirecting all urls except the ones starting with "_res/" to index.php.

What I need now is that all URLs matching "[anypath]/video/[anyfilename].mp4" will be rewritten to "content/[anypath]/video/[anyfilename].mp4" (which is the actual path of this file on the server - I can't use x-sendfile on this shared web space, thus I need to rewrite large file urls to their actual server locations to avoid php's fileread-function).

From my understanding of these RewriteRules, I think I have to place this rule just before the last one.

Unfortunately my regexp-expertise is practically non-existent.

What I thought should work is this:

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

The regexp should mean "starts with any amount of any characters, followed by "/video/", followed by any amount of any characters which are not '/' and ends with ".mp4".

When I insert this into my .htaccess right before the last rule, urls ending with "/video/myvid.mp4" are still rewritten to index.php.

You see me clueless. Any suggestions?

Thanks alot in advance!

Upvotes: 2

Views: 1077

Answers (1)

Jon Lin
Jon Lin

Reputation: 143906

I think you want:

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

And you want to add this rule above the one that routes to index.php

Upvotes: 1

Related Questions