У меня есть это дерево:
libs/
html/
app/
uploads/
files/
images/
male.png
female.png
.htaccess
download.php
.htaccess
index.php
/. htaccess
имеет следующее содержимое:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -Indexes
</IfModule>
RewriteEngine On
RewriteRule ^ index.php [END,L]
</IfModule>
Я хочу /uploads/.htaccess
на:
перенаправить на download.php
.htaccess
или download.php
перенаправить 404
.htaccess
или download.php
Примеры:
www.example.com/uploads - redirect 404
www.example.com/uploads/files - redirect 404
www.example.com/uploads/images- redirect 404
www.example.com/uploads/.htaccess - redirect 404
www.example.com/uploads/download.php - redirect 404
www.example.com/uploads/nonexistentfile - redirect 404
www.example.com/uploads/images/male.php - redirect download.php
www.example.com/uploads/images/female.php - redirect download.php
перенаправление на download.php
Я предполагаю, что вы имеете в виду «перезапись», а не внешнее «перенаправление».
Я бы предположил, что ваша система (т.е. конфигурация сервера ) уже настроен (с использованием mod_authz _...) для возврата 403 Forbidden при попытке прямого доступа к .htaccess
. Я бы оставил это как есть, если только у вас нет специального требования вернуть вместо этого 404.
перенаправление на 404
И просто для пояснения,вы буквально не «перенаправляете» на 404, вы просто «обслуживаете» 404. Если вы перенаправляете на 404, тогда вы сначала отправляете ответ 3xx обратно клиенту, что нежелательно.
В
1153478] файл /uploads/.htaccess попробуйте следующее:
RewriteEngine On
# Rewrite request to download.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule !download\.php$ download.php [L]
# Serve a 404 otherwise...
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ - [R=404]
Первое правило перезаписывает все запросы, которые еще не относятся к download.php
и существуют как физические файлы, в download.php
. (Запрос .htaccess
должен возвращать 403, если сервер настроен правильно.)
Второе правило обслуживает 404 для всех других «прямых» запросов. Начальное условие, которое проверяет переменную среды REDIRECT_STATUS
, гарантирует, что мы проверяем только прямые запросы, а не перезаписанные запросы (посредством более ранней перезаписи). Таким образом, это включает:
download.php
(но не перезаписанные запросы к download.php
).