Можно ли установить переменную среды в PHP и перенаправить через .htaccess на основе этой переменной среды? - PullRequest
0 голосов
/ 08 марта 2012

У меня есть папка защищенная . Я хочу, чтобы люди, вошедшие в систему (через PHP / WordPress), имели доступ к этой папке и ее файлам.

Те, кто не вошли в систему, должны быть перенаправлены через .htaccess .

Может ли условие перезаписи .htaccess быть основано на переменной среды или серверной переменной, которую я добавил или отредактировал из PHP?

UPDATE:

Смотрите мой ответ ниже.

Ответы [ 3 ]

1 голос
/ 08 марта 2012

.htaccess (гипертекстовый доступ) - это файл конфигурации уровня каталога, поддерживаемый несколькими веб-серверами.Я не могу придумать простой способ получить доступ к переменным времени выполнения, установленным в PHP, с помощью .htaccess, так как .htaccess не позволяет «выполнять» команды, это просто набор директив config.

Возможно, вы могли бы сделать какую-то ОЧЕНЬ ОЧЕНЬ странную комбинацию сценариев .htaccess и CGI и, возможно, больше, чтобы получить доступ к уровню webservice @ PHP, но это было бы далеко за пределами моих навыков программирования, и я полагаю, что за пределами большинстваPHP-разработчики тоже ...

По крайней мере, это то, что я могу вам сказать, мне было бы интересно, если бы кто-то знал взлом для этого ...

Самый простой способ, как это сделатьтакие перенаправления, на мой взгляд, будут header("Location: xxx.html"); непосредственно в PHP.

0 голосов
/ 09 марта 2012

После долгих исследований я решил это.

Моя система папок настроена так:

/file-share/users-folder-name

Мой .htaccess файл в /file-share выглядит следующим образом:

# .htaccess /file-share

RewriteEngine On
RewriteBase /

# no cookie set    
RewriteCond %{HTTP_COOKIE} !^.*client.*$ [NC]
RewriteRule ^(.*)$ /file-share-redirect.php?q=$1 [NC,L]

# cookie set 
RewriteCond %{QUERY_STRING} !verified$ [NC]
RewriteCond %{HTTP_COOKIE} client=([^;]+) [NC]
RewriteRule ^(.*)$ /file-share/%1/$1?verified [NC,L,QSA]

# custom 404
ErrorDocument 404 /file-share-redirect.php?e=404&q=$1

#end

Если файл cookie установлен, и файл существует в папке клиента, то клиент без проблем перенаправляется в запрошенный файл.Окончательный запрос файла также получает параметр url, чтобы избежать цикла перенаправления.

Если пользователь вошел в систему, но файл cookie не установлен, мой файл file-share-redirect.php создает файл cookie, а затем перенаправляет его на запрошенный файл.,Срок действия файла cookie, созданного в приведенном ниже коде, истекает через час.

<?php setcookie('client', $users_folder_name, time()+3600); ?>

ОБНОВЛЕНИЕ

Вы можете обеспечить безопасность файла cookie, используя зашифрованное имя файла cookie изначение.Файл cookie будет создаваться только в тех системах, где пользователи входят в систему.

PHP * setcookie() даже позволит вам создать файл cookie, который недоступен из JavaScript . Я дважды проверил это.

Имена подпапок будут довольно сложными, совершенно не угадываемыми.Никто никогда не увидит имена подпапок, кроме тех, у кого есть доступ по ftp.Даже те, кто вошел в систему, увидят только /_/filename.ext без подпапки.

0 голосов
/ 08 марта 2012

Вы не можете редактировать файл .htaccess на лету, используя PHP для установки этих переменных. Я имею в виду, что вы можете, но файл .htaccess используется всем сервером, а не пользователем. Если вы не хотите делать какие-то нелепые переменные write-username-environment-variable для .htaccess и надеетесь, что это как-то сработает, вам гораздо лучше делать это через php. Если они не вошли в систему, вы можете перенаправить их с помощью PHP, чтобы они также не могли видеть защищенные папки.

Если вы хотите сохранить их во всей папке, но не хотите делать что-то вроде require security-check.php для каждого файла, вы можете использовать auto_prepend_file. Вы также можете использовать ваш .htaccess для маршрутизации всего доступа к файлу через один определенный php-файл, который делает это. Это нужно сделать, если вы не пускаете людей в не-php файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...