Запретить скрипт от клиента, но использовать локально - PullRequest
0 голосов
/ 25 января 2011

У меня есть файл .htaccess - выглядит примерно так:

RewriteEngine On

<FilesMatch ^.*\.php.*$>
 Order allow,deny
 Deny from all
 Satisfy All
</FilesMatch>

RewriteRule ^help$ scripts/help.php [L]
#more rewrites here...

Я хотел бы иметь возможность разрешить перезапись URL-адреса, такого как http://example.com/help (согласноправило) и обрабатывается сценарием help.php в каталоге scripts, но в то же время запрещает людям запускать сценарий напрямую с помощью http://example.com/scripts/help.php.Проблема в том, что когда я использую эти операторы, оба URL возвращают 403 Запрещено.Я даже не уверен, возможно ли то, что я пытаюсь сделать ...

К сожалению, я не могу разместить файлы вне / выше корневого веб-каталога (вот почему я спрашиваю это),и при этом у меня нет доступа к файлу httpd.conf.

1 Ответ

1 голос
/ 25 января 2011

Если запрашивается /help, он внутренне переписывается на /scripts/help.php, что соответствует шаблону <FilesMatch>.Вот почему доступ к /help также запрещен.

Но вы можете использовать mod_rewrite только для запрета доступа к /scripts/help.php, если он был запрошен напрямую, проверив строку запроса :

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\.php[/? \]
RewriteRule .*\.php.*$ - [F]

Здесь ^[A-Z]+\ /[^?\ ]*\.php[/? \] проверяет, есть ли .php в запрошенном пути URI (ему может предшествовать только любой символ, кроме ? и пробел) и за ним следует / (разделитель сегмента пути), ? (индикатор для запроса URI) или пробел (конец URI).

...