是否可以在PHP中设置环境变量并根据该环境变量通过.htaccess重定向?

时间:2012-03-08 14:13:29

标签: php .htaccess environment-variables

我有受保护的文件夹。我希望登录的用户(通过PHP / WordPress)可以访问该文件夹及其中的文件。

未登录的用户应通过 .htaccess 重定向。

.htaccess 重写条件是否可以基于我从PHP添加或编辑的环境变量或服务器变量?

更新

请参阅下面的答案。

3 个答案:

答案 0 :(得分:1)

.htaccess(超文本访问)文件是多个Web服务器支持的目录级配置文件。我无法想到如何使用.htaccess访问PHP中设置的运行时变量的任何简单方法,因为.htaccess不允许“执行”命令,它只是一堆配置指令。

你可能会做一些非常非常奇怪的.htaccess和CGI脚本组合,也许更多可以访问webservice @ PHP级别,但这远远超出了我的编程技巧,我想超出大多数PHP开发人员的范围...

至少这是我可以告诉你的,如果有人知道黑客的话,我也会感兴趣...

在我看来,如何进行此类重定向的最简单方法是直接在PHP中header("Location: xxx.html");

答案 1 :(得分:0)

您无法使用PHP动态编辑.htaccess文件来设置这些变量。我的意思是,您可以,但.htaccess文件由整个服务器使用,而不是按用户使用。除非你想对.htaccess做一些荒谬的write-username-environment-variables并希望它以某种方式工作,否则你通过php做这件事要好得多。如果他们没有登录,您可以使用PHP将其重定向,这样他们就无法看到受保护的文件夹。

如果您希望将它们排除在整个文件夹之外,但又不想在每个文件上执行require security-check.php之类的操作,则可以使用auto_prepend_file。您还可以使用.htaccess通过一个执行此操作的特定php文件来路由所有文件访问。如果你让人们远离非php文件,你需要这样做。

答案 2 :(得分:0)

经过大量研究,我解决了它。

我的文件夹系统设置如下:

/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()甚至可以让您创建一个无法从JavaScript 访问的Cookie。 我仔细检查过这个。

子文件夹名称将非常复杂,完全无法使用。没有人会看到子文件夹名称,除了那些具有ftp访问权限的名称。即使是那些登录的用户也只能看到/_/filename.ext,而没有子文件夹。