Запретить прямой запрос, используя .htaccess - PullRequest
0 голосов
/ 03 октября 2010

Есть ли способ использовать .htaccess для отклонения прямого запроса к определенной части моего сайта, например, www.example.com/XXXXX

Я хочу разрешить Referer только для XXXXXX. Я знаю, что мне нужно как-то использовать HTTP_REFERER для достижения своей цели, но в настоящее время я использую другие правила .htaccess и не знаю, как объединить все правила вместе. Это то, что у меня сейчас есть в моем .htaccess

Опции + FollowSymlinks ПереписатьEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteRule ^ ([^ /] +) $ /index.php?page=$1 [QSA, L]

1 Ответ

0 голосов
/ 04 октября 2010

Во-первых, я не уверен, что правильно понял ваш вопрос, но я все равно попробую.

В настоящее время у вас есть:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA,L]

Кроме того, вам нужно:

RewriteCond %{REQUEST_FILENAME}   -d
RewriteCond %{HTTP_REFERER} !^http://your-domain\.tld/.*$ [NC]
RewriteRule XXXXXX/(.*)$ - [F,NC,L]

.htaccess RewriteRule проверяются в порядке их появления, поэтому вы можете захотеть сделать что-то подобное, хотя я исправлен, потому что у меня не было возможности проверить, сработает ли это:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA]
RewriteCond %{HTTP_REFERER} !^http://your-domain\.tld/.*$ [NC]
RewriteRule XXXXXX/(.*)$ - [F,NC,L]

То есть, сначала проверьте, является ли это аргументированный файл с именем index.php, который должен быть переписан, если нет (без флага L), перейдите к следующему правилу, сначала получив новое условие, затем, если правило проверяется, ограничить доступ (скинуть HTTP 403).

Имеет ли это смысл? В любом случае, пожалуйста, поэкспериментируйте с приведенным выше примером .htaccess, потому что, как я уже сказал, я не смог его протестировать.

...