不需要的URL切换和安全问题。寻找更简单或更好的解决方案

时间:2012-11-02 22:22:35

标签: php security redirect data-structures get

我不能做得更短: - /

我的php项目有关重定向和$ _GET的问题。

我希望你能帮助我:)。

假设我在我的网络服务器的根目录中有这3个文件夹。

/root
   /themes
         /page.php
   /project1
         /index.php
         /content.php
   /project2
         /index.php
         /content.php

/themes包含一个名为/page.php的php文件 /page.php包含动态PHP / HTML结构或主题,我可以将其用于不同的内容文件。

/project1/project2主要包含/page.php包含的HTML内容文件。

/project1/project2是2个不同域的根文件夹,因此每个域都包含index.php

现在问题是:
为了让每个域的网站都能正常工作,我必须将用户重定向到/themes/page.php,因为那是功能所在的,然后包含正确的内容文件。
要让/page.php知道必须加载的/project1/project2内容文件,我会使用index.php的重定向来填充$_GET,如下所示:< / p>

header("Location: root-domain/themes/page.php?path=project1&file=content1");

这样,page.php可以从GET中获取所需文件的路径和文件名。

BUT:
这样,用户就可以了解每个文件夹和每个文件名,甚至是一些php文件。我不知道那是不是很好? 并且URL会从请求的URL更改为我的Web服务器根目录的URL。

有人知道更好的解决方案吗?

谢谢! &LT; 3

1 个答案:

答案 0 :(得分:2)

实际上,我认为有一个解决方案,你只需要使用mod_rewrite,它是Apache的一个模块。有了它,您可以将所有URL请求重定向到您的这一个特定页面。不幸的是,mod_rewrite背后的“神奇”有点复杂,所以我建议你this documentation进一步使用。

但是现在,只需检查服务器配置中是否启用了mod_rewrite,然后在目录 project1 (或任何其他)中创建名为 .htaccess 的文件并在其中插入这一小段代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([^/.]+)/?([^/.]+)?/?$ /themes/page.php?path=$1&file=$2 [QSA]
</IfModule>

点击保存,应该是它。现在每个页面请求都通过 /themes/page.php

顺便说一下,你绝对不应该在url中公开脚本名称。