| 1 |
<?php |
| 2 |
// @codingStandardsIgnoreFile |
| 3 |
if(!defined('WPINC')) // MUST have WordPress. |
| 4 |
exit('Do not access this file directly.'); |
| 5 |
|
| 6 |
global /* A Multisite ``$base`` configuration? */ $base; |
| 7 |
$ws_plugin__s2member_temp_s_base = (!empty($base)) ? $base : c_ws_plugin__s2member_utils_urls::parse_url (network_home_url ('/'), PHP_URL_PATH); |
| 8 |
// This works on Multisite installs too. The function ``network_home_url ()`` defaults to ``home_url ()`` on standard WordPress installs. |
| 9 |
// Do NOT use ``site`` URL. Must use the `home` URL here, because that's what WordPress uses in its own `mod_rewrite` implementation. |
| 10 |
?> |
| 11 |
|
| 12 |
<IfModule env_module> |
| 13 |
# No GZIP for script-based file downloads. |
| 14 |
SetEnv no-gzip 1 |
| 15 |
</IfModule> |
| 16 |
|
| 17 |
<IfModule rewrite_module> |
| 18 |
# Enable symlinks (required for rewrites). |
| 19 |
Options +FollowSymLinks |
| 20 |
|
| 21 |
# Enable rewrite and configure base. |
| 22 |
RewriteEngine On |
| 23 |
RewriteBase <?php echo $ws_plugin__s2member_temp_s_base . "\n"; ?> |
| 24 |
|
| 25 |
# Initialize all environment variables we're using below. |
| 26 |
RewriteCond %{ENV:s2member_file_download_setup} !^complete$ |
| 27 |
RewriteRule ^(.*)$ - [E=s2member_file_download_wp_vdir:0,E=s2member_file_download:$1,E=s2member_file_stream:0,E=s2member_file_inline:0,E=s2member_file_storage:0,E=s2member_file_remote:0,E=s2member_file_ssl:0,E=s2member_file_download_key:0,E=s2member_skip_confirmation:0,E=s2member_file_download_setup:complete] |
| 28 |
|
| 29 |
# Handle virtual directories, common on multisite networks. |
| 30 |
RewriteCond %{ENV:s2member_file_download_wp_vdir_check} !^complete$ |
| 31 |
RewriteCond %{THE_REQUEST} ^(?:GET|HEAD)(?:[\ ]+)(?:<?php echo preg_quote ($ws_plugin__s2member_temp_s_base, ' '); ?>)([_0-9a-zA-Z\-]+/)(?:wp-content/) |
| 32 |
RewriteRule ^(.*)$ - [E=s2member_file_download_wp_vdir:,E=s2member_file_download_wp_vdir:%1,E=s2member_file_download_wp_vdir_check:complete] |
| 33 |
|
| 34 |
# Handle streaming download requests via the rewrite engine. |
| 35 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-stream/)(.+)$ |
| 36 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%2,E=s2member_file_stream:,E=s2member_file_stream:&s2member_file_stream=yes] |
| 37 |
|
| 38 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-stream-(.+?)/)(.+)$ |
| 39 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_stream:,E=s2member_file_stream:&s2member_file_stream=%2] |
| 40 |
|
| 41 |
# Handle inline file requests via the rewrite engine. |
| 42 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-inline/)(.+)$ |
| 43 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%2,E=s2member_file_inline:,E=s2member_file_inline:&s2member_file_inline=yes] |
| 44 |
|
| 45 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-inline-(.+?)/)(.+)$ |
| 46 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_inline:,E=s2member_file_inline:&s2member_file_inline=%2] |
| 47 |
|
| 48 |
# Handle storage specifications via the rewrite engine. |
| 49 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-storage-(.+?)/)(.+)$ |
| 50 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_storage:,E=s2member_file_storage:&s2member_file_storage=%2] |
| 51 |
|
| 52 |
# Handle remote authorization requests via the rewrite engine. |
| 53 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-remote/)(.+)$ |
| 54 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%2,E=s2member_file_remote:,E=s2member_file_remote:&s2member_file_remote=yes] |
| 55 |
|
| 56 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-remote-(.+?)/)(.+)$ |
| 57 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_remote:,E=s2member_file_remote:&s2member_file_remote=%2] |
| 58 |
|
| 59 |
# Handle SSL file requests via the rewrite engine. |
| 60 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-ssl/)(.+)$ |
| 61 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%2,E=s2member_file_ssl:,E=s2member_file_ssl:&s2member_file_ssl=yes] |
| 62 |
|
| 63 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-ssl-(.+?)/)(.+)$ |
| 64 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_ssl:,E=s2member_file_ssl:&s2member_file_ssl=%2] |
| 65 |
|
| 66 |
# Handle file download keys via the rewrite engine. |
| 67 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-file-download-key-(.+?)/)(.+)$ |
| 68 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_file_download_key:,E=s2member_file_download_key:&s2member_file_download_key=%2] |
| 69 |
|
| 70 |
# Handle confirmations having beek skipped via the rewrite engine. |
| 71 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-skip-confirmation/)(.+)$ |
| 72 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%2,E=s2member_skip_confirmation:,E=s2member_skip_confirmation:&s2member_skip_confirmation=yes] |
| 73 |
|
| 74 |
RewriteCond %{ENV:s2member_file_download} ^(.*?)(?:s2member-skip-confirmation-(.+?)/)(.+)$ |
| 75 |
RewriteRule ^(.*)$ - [N,E=s2member_file_download:,E=s2member_file_download:%1%3,E=s2member_skip_confirmation:,E=s2member_skip_confirmation:&s2member_skip_confirmation=%2] |
| 76 |
|
| 77 |
# Cleanup variables not used in this request. Looking for `0` values. |
| 78 |
RewriteCond %{ENV:s2member_file_download_wp_vdir} ^0$ |
| 79 |
RewriteRule ^(.*)$ - [E=s2member_file_download_wp_vdir:] |
| 80 |
|
| 81 |
RewriteCond %{ENV:s2member_file_stream} ^0$ |
| 82 |
RewriteRule ^(.*)$ - [E=s2member_file_stream:] |
| 83 |
|
| 84 |
RewriteCond %{ENV:s2member_file_inline} ^0$ |
| 85 |
RewriteRule ^(.*)$ - [E=s2member_file_inline:] |
| 86 |
|
| 87 |
RewriteCond %{ENV:s2member_file_storage} ^0$ |
| 88 |
RewriteRule ^(.*)$ - [E=s2member_file_storage:] |
| 89 |
|
| 90 |
RewriteCond %{ENV:s2member_file_remote} ^0$ |
| 91 |
RewriteRule ^(.*)$ - [E=s2member_file_remote:] |
| 92 |
|
| 93 |
RewriteCond %{ENV:s2member_file_ssl} ^0$ |
| 94 |
RewriteRule ^(.*)$ - [E=s2member_file_ssl:] |
| 95 |
|
| 96 |
RewriteCond %{ENV:s2member_file_download_key} ^0$ |
| 97 |
RewriteRule ^(.*)$ - [E=s2member_file_download_key:] |
| 98 |
|
| 99 |
RewriteCond %{ENV:s2member_skip_confirmation} ^0$ |
| 100 |
RewriteRule ^(.*)$ - [E=s2member_skip_confirmation:] |
| 101 |
|
| 102 |
# Put everything together now and process the internal rewrite. |
| 103 |
RewriteRule ^(.*)$ %{ENV:s2member_file_download_wp_vdir}?s2member_file_download=%{ENV:s2member_file_download}%{ENV:s2member_file_stream}%{ENV:s2member_file_inline}%{ENV:s2member_file_storage}%{ENV:s2member_file_remote}%{ENV:s2member_file_ssl}%{ENV:s2member_file_download_key}%{ENV:s2member_skip_confirmation} [QSA,L] |
| 104 |
</IfModule> |
| 105 |
|
| 106 |
<IfModule !rewrite_module> |
| 107 |
<IfModule authz_core_module> |
| 108 |
Require all denied |
| 109 |
</IfModule> |
| 110 |
<IfModule !authz_core_module> |
| 111 |
deny from all |
| 112 |
</IfModule> |
| 113 |
</IfModule> |
| 114 |
|
| 115 |
<?php unset($ws_plugin__s2member_temp_s_base); ?> |
| 116 |
|