2016-04-03 165 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