每个页面的PHP动态URL

时间:2014-11-07 01:34:16

标签: php html url dynamic hyperlink

一直在查看stackoverflow的答案或提示,但没有找到我要找的东西,似乎大多数是关于sql的东西。 无论如何,我的网站使用动态链接,所以主索引具有所有的HTML内容,然后内容框是唯一根据我的页面文件夹中的php文件更改的内容。

我可以访问php页面,但我想要做的是从pages文件夹内的目录中访问php页面。

大多数页面使用此链接,这只是pages文件夹中的about.php 的index.php?页=约

但是如何链接此页面文件夹中的其他目录?让我说我的目录联系人里面有index.php所以/contact/index.php我该如何链接到那个?

这是我到目前为止我的网站内容区域的代码,一位朋友多年前为我写了这封代码,我现在无法联系他获取帮助。

<?php
function open_page($string){
    if (preg_match("/^[a-zA-Z]+$/", $string)){
        $string = $string;
    }else{ 
        $string = "";
    }
    return $string;
}
$page = open_page($_GET['page']);
if ($page){
    $file = "pages/".$page.".php";
    if (file_exists($file)){
        $pagename = $page;
    }else{
        $pagename = "404";
    }
    include("pages/".$pagename.".php");
}else{
    echo 'ADD CONTENT HERE';
}
?>

3 个答案:

答案 0 :(得分:1)

创建链接时,您可以使用

index.php?page=<?php echo urlencode('contact/index'); ?>

并在您的代码中替换

$page = urldecode($_GET['page']);

答案 1 :(得分:0)

它的编码方式我认为您无法通过以下方式访问该文件:

的index.php?页=接触/索引

因为表达式不匹配:&#34; /&#34;。你可以修改表达式来添加它,但它相对简单。

preg_match("/^[a-zA-Z\/]+$/", $string)

我不确定它的安全含义,但我觉得不应该是一个问题,但只是它的一些东西让我感到不安。我会考虑为子文件夹添加特殊规则和/或重新构造glob()函数周围的代码,这看起来更安全。

答案 2 :(得分:0)

很高兴在这里提供帮助。首先,如果您知道链接“contact / *”需要放在您的页面上,我假设您事先知道您的目录结构。如果没有,那么我想你只需阅读目录并返回页面列表中的所有可用链接(也许是菜单)。

所以,如果我理解并且真的理解你,给你一个提示而不是一个完整的答案,因为我不能指望在不知道你的最终目的的情况下写出确切的程序,我会改变以下内容:

if (file_exists($file)){
    $pagename = $page; .....

if (file_exists($file)){
    $pagename = $page;
    // $page exists. I will assume you have a folder by the same name in this case
    $dir = scandir(__FILE__ . "/" . $page . "/"); // just double check I have the direcotry path correct. this should return array with the '..' & '.' locations plus other scripts. it is not recursive
    //scan through the $dir var printing out the relevant html anchor links, for example
    echo "<a href='" . $page . "/" . $dir[position_from_your_loop_as_you_scan] . "'></a>";
    //or attach the above to a variable for ouputting to page/console later

以上只是粗略的代码,但我希望你能得到这个想法并且有足够的时间继续下去。

或者,查看php的glob()函数。


顺便说一下,你正在使用动态包含。虽然在您的情况下,它似乎并不重要,但仍然是对您的输入进行消毒的良好做法。我会换掉

$page = open_page($_GET['page']);

类似

$page = open_page(filter_var($_GET['page'], **FILTER_SANITIZE_CONSTANT**));

在此处http://php.net/manual/en/filter.filters.sanitize.php查找您使用的可用过滤器常量。

使用php isset()方法检查您所在的$ _GET变量(在本例中为“page”)是否存在也是一种好习惯,如果不存在或有效则执行其他操作。