【问题标题】:Dynamic PHP Redirect via extracting URL from an external file通过从外部文件中提取 URL 进行动态 PHP 重定向
【发布时间】:2013-01-05 15:02:03
【问题描述】:

作为预防措施,我想使用 PHP 创建一种易于重用/可修改的方法,将用户重定向到指定的 URL。

我有通常的 php 标头重定向:

<?php

   header( 'Location: http://www.stackoverflow.com/' ) ;

?>

但是我更喜欢做的是,因为这个文件将被放置在很多目录中,以使生活更轻松,并从外部文件中提取 url,例如

http://www.stackoverflow.com/url.xml

这当然会包含相关网站的 URL,除非有其他方法可以自动捕获域本身?这个我不确定。

有没有人能很好地说明如何做到这一点或提供最佳方法?

谢谢。

【问题讨论】:

  • 你想把这个文件放到目录中,目录的内容不应该被任何人看到为 index.php?所有东西(包含 URL 的文件)都在同一台服务器上?

标签: php redirect dynamic


【解决方案1】:

我的想法与@adam 相同,我不建议您从文件中提取 url,因为它可以从攻击者那里读取。最好将它们作为变量、数组或任何其他数据结构包含在 php 文件中。

将 url 存储在一个名为 config.inc.php 的文件中:

<?php

define('USER_PATH', '/redirect/user/path');
define('ADMIN_PATH', '/redirect/admin/path');

?>

然后在你的php文件中:

<?php
include 'config.inc.php';
header( "Location: http://{$_SERVER['HTTP_HOST']} . USER_PATH ) ; //or whatever variable you want to use to redirect.
?>

如果您因为安全问题想要重定向某些文件夹,您可以使用 Apache 的 htaccess 来完成。 只需将其放在根文件夹中,然后为每个重定向添加任意数量的最后一行。 此处提到的每个文件夹都只能由服务器上运行的脚本访问。
使用此每个使用 HTTP 的访问请求都会被重定向。因此这仅适用于包含要包含的脚本的目录。它不适用于不应显示索引的图像目录,但图像应保持可访问性。

RewriteEngine on
RewriteBase /
RewriteRule ^includes/(.*) http://www.stackoverflow.com/ [R=301,L]
RewriteRule ^includes/(.*) http://www.stackoverflow.com/ [R=301,L]

如果您对此不熟悉,可以使用http://www.htaccessredirect.net/

【讨论】:

  • URL 重定向只是为了重定向试图直接访问目录的人,例如 /includes。所以任何去那里的人都会被重定向到网站主页。
  • 这行得通吗?
  • 是的,它可以工作,另一种方法是使用 .htaccess 文件,这样用户可以被 Web 服务器重定向,它更复杂但易于维护。
  • 如果我正确理解 Mosif,这些 index.php 文件应该是额外的安全层,如果网络服务器设置(如 htaccess)不起作用。
  • 听起来很合理,那么我将开始应用这两种解决方案更好。
【解决方案2】:

如果包含该 url 的文件位于您无法控制的域中,则存在安全风险。

相反,将 url 存储在一个名为 config.inc.php 的文件中:

<?php

define('REDIRECT_URL', '/redirect/path');

?>

然后将其包含在您的项目中:

<?php

include 'config.inc.php';

echo REDIRECT_URL;

// /redirect/path

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2018-06-17
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多