Prevent file access from URL – PHP htaccess
When developing a web application, it is very important for you to prevent file access from URL for the users. Because someone might try to download all your images and videos by directly accessing them from the URL. You must allow users to view the images and videos directly from your website instead of just letting the automated scripts download all uploaded data.
.htaccess
First, you need to create a file named “.htaccess” along with the dot “.” without the double quotes at the root folder of your project. Some operating systems hide the files that start with a dot extension.
- In Windows, go to “view” from the top menu and check the “show hidden items” checkbox.
- In Mac, press (command + shift + dot) (⌘ + ⇧ + .) at the same time.
- In Ubuntu, press Ctrl + H.
Following should be the content of your .htaccess file:
# enable mod_rewrite
RewriteEngine On
# RewriteCond = define rule condition
# HTTP_REFERER = check from where the request originated
# ! = exclude
# ^ = start of string
# [NC] = case insensitive search
RewriteCond %{HTTP_REFERER} !^http://localhost:8888/tutorials/video-streaming-php [NC]
# \ = match any
# . = any character
# () = pattern, group
# $ = end of string
# [F] = forbidden, 403
# [L] = stop processing further rules
RewriteRule \.(gif|jpg|jpeg|png|mp4|mov|mkv|flv)$ - [F,L]
At line #9, you must place your website base URL without forwarding the slash “/” at the end. Using htaccess, you can also prevent “.env” files from accessing in your Laravel application. Follow this for more.
Access from code only
Now if you try to access the file directly from the URL, you will get a 403 Forbidden error. But you can easily access it from your code like this:
<video src="video.mp4" controls></video>
This prevent file access from the URL but you can still see it in the browser. However, the user can still manually download the video file. But it prevents the automated scripts to download all the files from your server directory.
Can we access that file from android or iOS or flutter app using video/audio tag?
Yes.