我有大量的內容存儲在MySQL數據庫中,這爲我的應用程序提供了動力。我想在網上提供這些信息,爲非應用用戶提供內容以及增加我的網站排名。生成靜態頁面 - 瞭解URL請求
該應用程序的後端運行在PHP/MySQL上。因此,我想用PHP來生成這些頁面(這是否是正確的方法?)。我猜PHP會採用url的結構,例如www.xxxx.com/viewer/**venue**/**id**
,** **中的部分是可變的。我如何讓PHP根據這些請求來路由請求?
我有大量的內容存儲在MySQL數據庫中,這爲我的應用程序提供了動力。我想在網上提供這些信息,爲非應用用戶提供內容以及增加我的網站排名。生成靜態頁面 - 瞭解URL請求
該應用程序的後端運行在PHP/MySQL上。因此,我想用PHP來生成這些頁面(這是否是正確的方法?)。我猜PHP會採用url的結構,例如www.xxxx.com/viewer/**venue**/**id**
,** **中的部分是可變的。我如何讓PHP根據這些請求來路由請求?
也許最好和最有效的方法是在Apache中使用URL重寫。在你的根文件夾下面的代碼添加到您的.htaccess
文件(或創建一個,如果不存在的話):
RewriteEngine On
RewriteRule ^/viewer/([^/]+)/([^/]+)/?$ viewer.php?venue=$1&id=$2 [L]
現在,創建一個viewer.php
文件根內。然後,您可以訪問的變量作爲$_GET
超級全局的部分內容如下:
$venue = $_GET['venue'];
$id = $_GET['id'];
提醒您,您應該在SQL代碼注入,並相應地消毒這些投入。
太棒了!如果我將Apache mod應用到我當前的服務器,它仍然會正確地服務舊頁面(即我的舊index.php等),或所有請求現在都會通過viewer.php? – 2014-10-07 15:08:17
不,RewriteRule只針對與你的模式匹配的任何URL(即'/ viewer /()/()')。 – BenM 2014-10-07 15:09:31
最後一個問題,這是否使頁面可以通過搜索引擎抓取? – 2014-10-07 15:14:34
取決於您的網絡服務器。
如果你使用PHP5-FPM與Nginx的:
location /viewer {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME /path/to/viewer.php;
include fastcgi_params;
}
可能會做到這一點。然後在PHP中,你需要在/ viewer之後分解$ _SERVER ['REQUEST_URI']路徑,並根據這個路徑運行你的邏輯。
實施例:
<?
$parts = explode("/", $_SERVER['REQUEST_URI']);
$i=0;
while($parts[$i] != 'viewer'){
unset($parts[$i]);
$i++;
}
if($parts[$i] == 'viewer') unset($parts[$i]);
$parts = array_values($parts);
var_dump($parts);
?>
您應該在/觀衆/(場地和1D)後看到所有的值的陣列。
URL重寫; [用PHP重寫URL](http://stackoverflow.com/questions/16388959/url-rewriting-with-php) – 2014-10-07 14:54:55