# BEGIN Expires Don't forget to enable mod_headers and mod_expires, you can do so by running a2enmod rewrite and a2enmod headers
<ifModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 216000 seconds"
    ExpiresByType application/x-javascript "access plus 216000 seconds"
</ifModule>
# END Expires
# BEGIN Caching
<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
    <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
        Header set Cache-Control "max-age=2592000, public"
    </filesMatch>
    <filesMatch "\.(css)$">
        Header set Cache-Control "max-age=604800, public"
    </filesMatch>
    <filesMatch "\.(js)$">
        Header set Cache-Control "max-age=216000, private"
    </filesMatch>
    <filesMatch "\.(xml|txt)$">
        Header set Cache-Control "max-age=216000, public, must-revalidate"
    </filesMatch>
    <filesMatch "\.(html|htm|php)$">
        Header set Cache-Control "max-age=1, private, must-revalidate"
    </filesMatch>
</ifModule>
# END Caching
<IfModule mod_rewrite.c>
    RewriteEngine on

    #main Files
    RewriteRule    ^index.php$ view/index.php    [NC,L]
    #RewriteRule    ^index.php$ /view/index.php    [NC,L]
    #RewriteRule    ^$ view/    [NC,L]
    RewriteRule    ^bootstrap/(.+)$ view/bootstrap/$1 [NC,L]
    RewriteRule    ^js/(.+)$ view/js/$1 [NC,L]
    RewriteRule    ^css/(.+)$ view/css/$1 [NC,L]
    RewriteRule    ^img/(.+)$ view/img/$1 [NC,L]
    RewriteRule    ^page/([0-9]+)/?$ view/?page=$1    [QSA]
    RewriteRule    ^videoOnly/?$ view/?type=video    [NC,L]
    RewriteRule    ^audioOnly/?$ view/?type=audio    [NC,L]
    RewriteRule    ^download$ view/downloadExternalVideo.php    [NC,L]
    RewriteRule    ^info$ view/info.php    [NC,L]
    RewriteRule    ^downloadNow$ objects/downloadVideo.php    [NC,L]
    RewriteRule    ^getDownloadProgress$ objects/downloadVideoProgress.php    [NC,L]
    RewriteRule    ^status$ objects/status.json.php    [NC,L]

    RewriteRule    ^about$ view/about.php    [NC,L]
    RewriteRule    ^contact$ view/contact.php    [NC,L]
    RewriteRule    ^sendEmail$ objects/sendEmail.json.php    [NC,L]
    RewriteRule    ^captcha$ objects/getCaptcha.php    [NC,L]
    RewriteRule    ^monitor/(.+)$ objects/ServerMonitor/$1    [NC,L]
    RewriteRule    ^videosList$ view/videosList.php    [NC,L]
    RewriteRule    ^videosList/video/([A-Za-z0-9-_.]+)/page/([0-9]+)/?$ view/videosList.php?videoName=$1&page=$2    [QSA]
    RewriteRule    ^videosList/cat/([A-Za-z0-9-]+)/video/([A-Za-z0-9-_.]+)/page/([0-9]+)/?$ view/videosList.php?catName=$1&videoName=$2&page=$3    [QSA]

    #for the category name
    RewriteRule    ^cat/([A-Za-z0-9-]+)/?$ view/?catName=$1    [NC,L,QSA]
    RewriteRule    ^cat/([A-Za-z0-9-]+)/page/([0-9]+)/?$ view/?catName=$1&page=$2    [NC,L,QSA]

    
    #for the video name
    RewriteRule    ^video/([A-Za-z0-9-_.]+)/?$ view/?videoName=$1    [QSA]
    RewriteRule    ^v/([0-9]+)/?$ view/?v=$1    [QSA]
    RewriteRule    ^video/([A-Za-z0-9-_.]+)/page/([0-9]+)/??$ view/?videoName=$1&page=$2    [QSA]

    #for the video name
    RewriteRule    ^cat/([A-Za-z0-9-]+)/video/([A-Za-z0-9-_.]+)/?$ view/?catName=$1&videoName=$2    [QSA]
    RewriteRule    ^cat/([A-Za-z0-9-]+)/video/([A-Za-z0-9-_.]+)/page/([0-9]+)/?$ view/?catName=$1&videoName=$2&page=$3   [QSA]
    #for the embeded video name
    RewriteRule    ^videoEmbeded/([A-Za-z0-9-_.]+)/?$ view/videoEmbeded.php?videoName=$1    [QSA]
    RewriteRule    ^videoEmbed/([A-Za-z0-9-_.]+)/?$ view/videoEmbeded.php?videoName=$1    [QSA]
    RewriteRule    ^vEmbed/([0-9]+)/?$ view/videoEmbeded.php?v=$1    [QSA]

    RewriteRule    ^plugin/([A-Za-z0-9-_.]+)/(.*)?$ plugin/$1/$2    [NC,L]

    RewriteRule    ^upload$ view/mini-upload-form/    [NC,L]
    RewriteRule    ^fileUpload$ view/mini-upload-form/upload.php    [NC,L]
    RewriteRule    ^uploadPoster/([0-9]+)/(jpg|gif)$ objects/uploadPoster.php?video_id=$1&type=$2    [NC,L]

    #edit your own user
    RewriteRule    ^user$ view/user.php    [NC,L]

    #manager user
    RewriteRule    ^users$ view/managerUsers.php    [NC,L]
    RewriteRule    ^users.json$ objects/users.json.php    [NC,L]
    RewriteRule    ^updateUser$ objects/userUpdate.json.php    [NC,L]
    RewriteRule    ^savePhoto$ objects/userSavePhoto.php    [NC,L]
    RewriteRule    ^saveBackground$ objects/userSaveBackground.php    [NC,L]
    RewriteRule    ^addNewUser$ objects/userAddNew.json.php    [NC,L]
    RewriteRule    ^deleteUser$ objects/userDelete.json.php    [NC,L]
    RewriteRule    ^recoverPass$ objects/userRecoverPass.php    [NC,L]
    RewriteRule    ^saveRecoverPassword$ objects/userRecoverPassSave.json.php    [NC,L]
    RewriteRule    ^signUp$ view/signUp.php    [NC,L]
    RewriteRule    ^createUser$ objects/userCreate.json.php    [NC,L]


    RewriteRule    ^usersGroups$ view/managerUsersGroups.php    [NC,L]
    RewriteRule    ^usersGroups.json$ objects/usersGroups.json.php    [NC,L]
    RewriteRule    ^addNewUserGroups$ objects/userGroupsAddNew.json.php    [NC,L]
    RewriteRule    ^deleteUserGroups$ objects/userGroupsDelete.json.php    [NC,L]

    # Ads
    RewriteRule    ^ads$ view/managerAds.php    [NC,L]
    RewriteRule    ^addNewAd$ objects/video_adsAddNew.json.php    [NC,L]
    RewriteRule    ^ads.json$ objects/video_ads.json.php    [NC,L]
    RewriteRule    ^deleteVideoAd$ objects/video_adDelete.json.php    [NC,L]
    RewriteRule    ^adClickLog objects/video_adClickLog.php    [NC,L]

    #manager category
    RewriteRule    ^categories$ view/managerCategories.php    [NC,L]
    RewriteRule    ^categories.json$ objects/categories.json.php    [NC,L]
    RewriteRule    ^addNewCategory$ objects/categoryAddNew.json.php    [NC,L]
    RewriteRule    ^deleteCategory$ objects/categoryDelete.json.php    [NC,L]

    #manager plugin
    RewriteRule    ^plugins$ view/managerPlugins.php    [NC,L]
    RewriteRule    ^plugins.json$ objects/plugins.json.php    [NC,L]
    RewriteRule    ^pluginsAvailable.json$ objects/pluginsAvailable.json.php    [NC,L]
    RewriteRule    ^pluginImport.json$ objects/pluginImport.json.php    [NC,L]
    RewriteRule    ^switchPlugin$ objects/pluginSwitch.json.php    [NC,L]
    RewriteRule    ^addDataObjectPlugin.json$ objects/pluginAddDataObject.json.php    [NC,L]
    RewriteRule    ^runDBScriptPlugin.json$ objects/pluginRunDatabaseScript.json.php    [NC,L]

    #manager playList
    RewriteRule    ^playLists.json$ objects/playlists.json.php    [NC,L]
    RewriteRule    ^playListsVideos.json$ objects/playlistsVideos.json.php    [NC,L]
    RewriteRule    ^playListsFromUser.json/([0-9]+)/?$ objects/playlistsFromUser.json.php?users_id=$1    [NC,L]
    RewriteRule    ^addNewPlayList$ objects/playlistAddNew.json.php    [NC,L]
    RewriteRule    ^playListAddVideo.json$ objects/playListAddVideo.json.php    [NC,L]
    RewriteRule    ^playlist/([0-9]+)/([0-9]+)/?$ view/?playlist_id=$1&playlist_index=$2    [NC,L]
    RewriteRule    ^playlist/([0-9]+)/?$ view/?playlist_id=$1    [NC,L]
    RewriteRule    ^removeVideoFromPlaylist/?$ objects/playlistRemoveVideo.php    [NC,L]
    RewriteRule    ^removePlaylist/?$ objects/playlistRemove.php    [NC,L]
    RewriteRule    ^renamePlaylist/?$ objects/playlistRename.php    [NC,L]
    RewriteRule    ^sortPlaylist/?$ objects/playlistSort.php    [NC,L]
    RewriteRule    ^channel/([^/]+)/?$ view/channel.php?channelName=$1    [NC,L]
    RewriteRule    ^channel/?$ view/channel.php    [NC,L]
    RewriteRule    ^channels/?$ view/channels.php    [NC,L]

    #manager videos
    RewriteRule    ^orphanFiles$ view/orphanFiles.php    [NC,L]
    RewriteRule    ^mvideos$ view/managerVideos.php    [NC,L]
    RewriteRule    ^videos.json$ objects/videos.json.php    [NC,L]
    RewriteRule    ^videosAndroid.json$ objects/videosAndroid.json.php    [NC,L]
    RewriteRule    ^videoAndroid.json$ objects/videoAndroid.json.php    [NC,L]
    RewriteRule    ^deleteVideo$ objects/videoDelete.json.php    [NC,L]
    RewriteRule    ^addNewVideo$ objects/videoAddNew.json.php    [NC,L]
    RewriteRule    ^refreshVideo$ objects/videoRefresh.json.php    [NC,L]
    RewriteRule    ^setStatusVideo$ objects/videoStatus.json.php    [NC,L]
    RewriteRule    ^setCategoryVideo$ objects/videoCategory.json.php    [NC,L]
    RewriteRule    ^reencodeVideo$ objects/videoReencode.json.php    [NC,L]
    RewriteRule    ^rotateVideo$ objects/videoRotate.json.php    [NC,L]
    RewriteRule    ^addViewCountVideo$ objects/videoAddViewCount.json.php    [NC,L]


    # Subscribes
    RewriteRule    ^subscribes$ view/managerSubscribes.php    [NC,L]
    RewriteRule    ^subscribes.json$ objects/subscribes.json.php    [NC,L]
    RewriteRule    ^subscribe.json$ objects/subscribe.json.php    [NC,L]
    RewriteRule    ^notifySubscribers.json$ objects/notifySubscribers.json.php    [NC,L]


    RewriteRule    ^youPHPTubeQueueEncoder.json$ objects/youPHPTubeQueueEncoder.json.php    [NC,L]
    RewriteRule    ^youPHPTubeEncoder.json$ objects/youPHPTubeEncoder.json.php    [NC,L]

    #comment
    RewriteRule    ^comments$ view/managerComments.php    [NC,L]
    RewriteRule    ^saveComment$ objects/commentAddNew.json.php    [NC,L]
    RewriteRule    ^comments.json/([0-9]+)$ objects/comments.json.php?video_id=$1    [NC,L]

    RewriteRule    ^login$ objects/login.json.php    [NC,L]
    RewriteRule    ^logoff$ objects/logoff.php    [NC,L]

    RewriteRule    ^like$ objects/like.json.php?like=1    [QSA] 
    RewriteRule    ^dislike$ objects/like.json.php?like=-1    [QSA] 


    #manager configuration

    RewriteRule    ^update/?$ update/update.php    [NC,L]
    RewriteRule    ^siteConfigurations$ view/configurations.php    [NC,L]
    RewriteRule    ^updateConfig$ objects/configurationUpdate.json.php    [NC,L]

    RewriteRule    ^charts$ view/charts.php    [NC,L]

    # YouTube Sync
    RewriteRule    ^youtubeUpload$ objects/youtubeUpload.json.php    [NC,L]

    RewriteRule    ^googleAdView$ view/googleAdView.php    [NC,L]

    RewriteRule    ^notifications.json$ objects/notifications.json.php    [NC,L]

    # It must be before image not found
    <IfModule mod_xsendfile.c>
       RewriteRule    ^videos/([A-Za-z0-9-_.]+)$ view/xsendfile.php?file=$1    [QSA]
    </IfModule>

    # if image do not exists
    RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .*$ img/image404.php [NC,L]

</IfModule>
