2014-03-29 80 views
0

你好,我試圖想出解決我的問題,但我只是無法。因此,這裏是我的問題:php路由器 - 變量url

我用什麼是的.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.+(.*)/(.*)$ ./index.php?mesto=$1&den=$2 [QSA,NC,L] 

它會顯示URL良好。如www.site.com/CITY/DAY例如../Prague/30.3.2014但我需要它更復雜。

我需要的是有更多的參數,如酒吧或餐廳的網址,例如www-site.com/Prague/30.3.2014/p/bar/restaurant和其他時間我可能會www-site.com/Prague/30.3.2014/p/pizza/bar

那部分我不知道該怎麼辦,因爲我有5個不同參數

我想,原始網址會看起來這index.php?city=Prague&day=30.3.2014&p1=0&p2=0&p3=0&p4=0&p5=0其中p1到p5是活動參數(0不是1是)。

我不明白如何檢測哪些參數是活動的,以及如何正確顯示漂亮的網址。你可以幫我嗎?

+0

我覺得最好把RewriteRules當做醜陋的URL,而不是漂亮的URL:從瀏覽器發送(漂亮)開始,決定它應該映射到什麼(醜陋)。如果你無法確定一個漂亮的URL是否適用於酒吧或餐廳,那麼Apache也不能。 – IMSoP

回答

0

使用

重寫規則^(。*)$ ./index.php [QSA,NC,L]

這將重定向所有您的要求爲單個指數。 PHP,與這樣的解析URI:

<?php 
    // Example URI: /florence/30-06-2009 

    // Remove first slash from REQUEST_URI 
    $uri = substr($_SERVER['REQUEST_URI'],1); 

    // Get an array with portions between slashes. 
    $splittedURI = explode("/", $uri); 

    // Here you get your city (or anything else that you want) 
    $city = array_unshift($splittedURI); // In example, $city = "florence" 

    // Remaining itens in $splittedURI are the arguments/parameters to your page 
    // Like this: 
    $date = $splittedURI[0]; // In example, $date = "30-06-2009" 
?> 

請記住,這只是和示例,您應該執行額外的驗證以避免PHP異常。

+0

謝謝!我使用explode()而不是split()tho,並使用從explode()函數生成的數組 – user2832216

+0

是的,我與javascript混淆。正確的功能是爆炸。謝謝! –

0

如果您需要複雜的路由(如果您確定要創建自己的路由器,而不是像ZF,Symfony等那樣使用現成的解決方案),您最好將整個請求uri傳遞給php路由器對象。您可以根據需要選擇複雜的路由器邏輯。

所以基本上,寬鬆的解析在重寫規則:

RewriteRule ^(.*)$ ./index.php?route=$1 [QSA,NC,L] 

然後你就可以讓index.php文件創建一個路由器對象,可以解析路徑參數,並委託它需要的地方工作。

雖然我建議讀一下現有的路由解決方案。