2013-03-26 35 views
0

我有一個index.php文件,我想根據url結構提供不同的內容。如何根據url結構在PHP中執行不同的操作

例如。如果url爲mysite.com/index.php/folder1我運行某個查詢並顯示結果,如果url是mysite.com/index.php/folder2,請運行其他查詢。

解決方案還必須爲mysite.com/folder1等工作(即index.php省略)。

如果可以將相同的方法擴展到mysite/com/folder1/category1等,這將是理想的。注意,在這裏不需要GET變量。

+0

你使用.htaccess重寫規則嗎? – Svetoslav 2013-03-26 10:34:52

+0

這個問題應該有所幫助:http://stackoverflow.com/questions/7677070/htaccess-rewrite-get-variables – bcmcfc 2013-03-26 10:34:55

+0

使用'$ _SERVER ['PATH_INFO']'和一個正確配置的Web服務器。 – 2013-03-26 10:35:46

回答

0

添加以下重寫規則在你的.htaccess文件,並把.htaccess文件到您的Webroot

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

上述規則紅如果系統中不存在文件/目錄,則將所有請求都導向index.php。

例如,沒有上述規則,如果http://example.com/test返回404錯誤,則使用上面的重定向規則,這將解析爲index.php。現在,在索引內。PHP你可以解析URL並根據你的需求進行處理。

2

你需要的是一個路由組件,它將url鏈接到你的代碼中的類/函數。這個組件根據你的請求執行某個類/函數。 In this question,不同的策略進行了討論,雖然有一些已有的框架缺失是有趣:

你可以使用任何這些做的正是我前面提。例如,使用的Symfony路由組件,你可以有像一個配置文件的路徑(潛在的網址):

# routes.yml 
route1: 
    path:  /foo 
    defaults: { _controller: 'MyController::fooAction' } 

route2: 
    path:  /foo/bar 
    defaults: { _controller: 'MyController::foobarAction' } 

所以當請求的URI以「/富」,從方法fooAction匹配類MyController被執行。 如果您不確定如何在現有的代碼庫中實現此功能,我強烈建議您閱讀Fabien Potencier編寫的a series of posts about how to use different Symfony components in your code。關於路由部分有a specific post

至於需要從你的url中刪除「index.php /」,你需要重寫它。如果您使用的是Apache,則需要在您的虛擬主機配置文件中添加重寫規則,或者僅在文檔根目錄中創建.htaccess文件。有關StackOverflow的數百個問題(如this one)以及official documentation page中的大量文檔。

0

最好的方法可能是在瀏覽器中分配變量。例如

index.php?folder=1  AND index.php?folder=2 

在PHP,那麼你使用:

$folder = $GET_['folder'] 
if($folder == 1) 
{ 
    //show site 1 
} 
else if ($folder == 2) 
{ 
    //show site 2 
} 
else 
{ 
    //error code 
} 

還有其他方法,包括的.htaccess但對於人誰不希望進入的是,我發現這是最好的方式

相關問題