2017-01-28 3 views
0

Я хочу запретить прямой доступ ко всем файлам, кроме одного: go.php.Запретить прямой доступ ко всем файлам, кроме одного URL-адреса PRETTY с параметрами получения

Я читал this вопрос, но в моем случае это не работает, потому что я отправляю также параметр GET.

Это означает, что все файлы должны быть лишены, за исключением случаев, когда вы пытаетесь перейти на www.domain.com/go.php?code=xyz123.

Мой код прямо сейчас:

Order Allow,Deny 
deny from all 
allow from [my IP here] 

<FilesMatch "go.php"> 
    Allow from all 
</FilesMatch> 

Как я могу это исправить?

Спасибо!


EDIT 1

Я обновил код на:

<Files go.php> 
Allow from all 
</Files> 

Теперь это позволяет, если URL является domain.com/go.php?code=123. Дело в том, что я использую довольно URL-адреса с этой перезаписи условие:

RewriteRule ^go/([a-z0-9]+)$    /go.php?code=$1 
RewriteRule ^go/([a-z0-9]+)/$    /go.php?code=$1 

Таким образом, вышеуказанные файлы кода не работает, если URL-адрес является domain.com/go/123. Как это исправить?

+0

Вы _could_ реализуете это на основе 'RewriteCond', ища параметр GET и 'RewriteRule' перенаправляет все остальное на документ с ошибкой. Но это странная концепция, контроль доступа через параметр GET ... – arkascha

+0

Я не против, чтобы люди обращались к 'go.php' becuase от php-файла, нет ли параметра 'code' GET, вы просто перенаправляетесь на страницу 404. Так что в основном мне нужен код для записи в 'FilesMatch', потому что просто' go.php' не работает с параметром GET. –

+0

@MagnusEriksson Пожалуйста, см. Мой вопрос edit :) –

ответ

1

Поскольку это только один конкретный файл, вам не нужно FilesMatch, но можно использовать Files вместо

<Files go.php> 
... 
</Files> 

Переписывание от /go/123 к /go.php?code=123 является классическим. Вы захватить часть для строки запроса и использовать его в подмене

RewriteRule ^go/(.+)$ /go.php?code=$1 [L] 

Я не ожидал, что <Files go> или <FilesMatch go> работать, потому что «/ идти/123» не является файлом в строгой смысл.

Так, несмотря на мое невежество дополнительные

<Files go> 
Allow from all 
</Files> 

работ.

В качестве альтернативы, вы можете использовать If и проверить запрошенный URL пути

<If "%{REQUEST_URI} =~ m,^/go/,"> 
Allow from all 
</If> 
+0

Это работает, но не работает с моим симпатичным URL-адресом. У меня есть: RewriteRule^go/([a-z0-9] +) $ /go.php? Code = $ 1'. Если я перейду на 'domain.com/go.php? Code = 123', он работает, но не работает с' domain.com/go/123'. –

+0

Это две разные и независимые вещи. 1. 'Files/FilesMatch' предназначен для ограничения управления доступом к определенному (набору) файлов 2.' RewriteRule' предназначен для переписывания с одного URL на другой. –

+0

Да, я знаю это, но я хотел спросить другую вещь. код Files, который вы мне дали, разрешает доступ к 'domain.com/go.php? code = 123', но нет, если URL-адрес довольно URL:' domain.com/go/123'. Я только что редактировал мой вопрос, чтобы лучше объяснить мою проблему. –

0

Проблема решена:

<FilesMatch "go|go.php"> 
    Allow from all 
</FilesMatch> 

Спасибо всем!

Смежные вопросы