2016-04-03 168 views
1
使用它

我不是100%肯定我在哪里搞乱这件事,但我试图做的是(最有可能的,如果文件存在位检查):获取URL查询字符串和PHP

  • 获取页面的查询,例如example.com?example
  • 然后使用字符串的文件路径(in this case news/example.php
  • 然后看该文件是否存在
  • 然后,如果确实如此,包括文件的工作,如果没有回应一个错误信息。

这是我的代码有:

$getPage = $_SERVER['QUERY_STRING']; 
    $page = "news/"+$getPage+".php"; 
    if (file_exists($page)) { 
    include $page; 
    } else { 
    echo "The page you are looking for cannot be found. To return back to the main page click <a href='example.com'>here</a>"; 
    } 

如果查询有可能成为example.com?news/example.php它不会是世界末日,但是越短越好;把它作为文件名,没有扩展名会更好。

+0

听起来好像你想要url重写 –

+0

你想让人们能够例如'http://example.com/index.php ?p = conctact',还是那不是你的问题? – Tom

+0

当心[RFI](https://en.wikipedia.org/wiki/File_inclusion_vulnerability) – Bigood

回答

0

PHP连接不支持+,您必须使用.

$getPage = $_SERVER['QUERY_STRING']; 
$page = "news/".$getPage.".php"; 
if (file_exists($page)) { 
    include $page; 
} else { 
    echo "The page you are looking for cannot be found. To return back to the main page click <a href='example.com'>here</a>"; 
} 

试试这个,让我知道是你的作品或没有。

0

在这种情况下,URL重写将更加相关。 创建与此.htaccess文件:

RewriteEngine on 
RewriteRule ^news/([^/\.]+)/?$ news.php?filename=$1 [L] 

如果你熟悉正则表达式,你会知道,封闭的括号()对于捕捉了这场比赛。

[^/\.]+是一个或多个不是正斜杠或句点的字符。

捕捉比赛结束后,它会在news.php替代它?文件名=

所以,当你请求http://example.com/news/helloworld, 你要投放的http://example.com/news.php?filename=helloworld

现在,您news.php文件应该是这样的:

$getPage = $_SERVER['QUERY_STRING']; 
$page = "news/".$getPage.".php"; 
if (file_exists($page)) { 
    include $page; 
} else { 
    echo "The page you are looking for cannot be found. To return back to the main page click <a href='example.com'>here</a>"; 
} 

现在你没有文件扩展名和URL看起来很干净。 要了解更多关于URL重写的内容,请看看这个:http://www.workingwith.me.uk/articles/scripting/mod_rewrite