На этот вопрос уже есть ответ здесь:
В настоящее время у меня есть некоторые zip-файлы, хранящиеся в корне http моего веб-сервера php / apache.
В настоящее время я могу получить доступ к файлам, используя следующее:
http://example.com/filename.zip
Однако я хочу «защитить» доступ к этим файлам, и они должны быть доступны только с помощью чего-то вроде:
http://example.com/key/filename.zip
Может ли кто-нибудь помочь мне создать перезапись Как это сделать?
Ключ - это фиксированная строка. Он будет жестко прописан в правилах .htaccess
.
Когда пользователь обращается к следующему URL-адресу:
http://example.com/key/filename.zip
Он должен иметь возможность загрузить zip-файл.
Когда пользователь обращается к следующему URL-адресу:
http://example.com/filename.zip
Он не должен иметь возможность загрузить zip-файл. Он должен получить сообщение об ошибке http.
Мой код на данный момент:
RewriteEngine on
RewriteRule ^key/(\w+).zip $1.zip
كودك الحالي يجب أن يخدم بالفعل /filename.zip
عند الوصول إلى /key/filename.zip
(على الرغم من أنه يجب أن يكون مرتبًا قليلاً).
لحظر الطلبات المباشرة إلى /filename.zip
، يمكنك القيام بشيء مثل التالي قبل التوجيه الحالي:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^/?\w+\.zip$ - [F]
هذه المجموعات (403 محظور) جميع الطلبات المباشرة لـ عناوين URL من النموذج /filename.zip
(في جذر المستند) ، بغض النظر عما إذا كان يتم تعيينه إلى ملف موجود أم لا.
بدلاً من ذلك ، لإرسال 404 بدلاً من ذلك ، قم بتغيير F
إشارة إلى R = 404
.
لذلك ، باختصار:
RewriteEngine On
# Block direct requests to /<filename>.zip
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^/?\w+\.zip$ - [R=404]
# Internally rewrite /key/<filename>.zip to /<filename>.zip
RewriteRule ^/?key/(\w+)\.zip /$1.zip [L]
تذكر أن الخط المائل العكسي يهرب من النقطة لمطابقة نقطة حرفية.
لاحظ أن هذا يعيد كتابة جميع طلبات / key /
إلى /
، بغض النظر عما إذا كان /
موجودًا أم لا. ستحصل فقط على 404 إذا لم يحدث ذلك.
قد تكون علامة L
مطلوبة إذا كان لديك توجيهات أخرى تتبع.
لقد قمت بتعديل التوجيهات حتى تعمل في تهيئة الخادم (وكذلك .htaccess
).