2013-06-25 32 views
2

我試圖取代像是否可以使用Route :: Connect路由到查詢字符串參數?

mysite.com/uploads:27 

一個URL到 mysite.com/uploads/upload?upload=27

我原來的計劃是使用.htaccess文件是這樣的:

RewriteRule ^upload:(.+) /uploads/upload?upload=$1 [L]

然而,我發現這不是蛋糕有幾個.htaccess文件的最好主意。無論如何,這個規則並沒有奏效。

所以我去看蛋糕的路線。但是,我似乎無法弄清楚如何路由到一個URL查詢字符串參數。

我想:

Router::connect('/upload::upload', 
    array('controller' => 'uploads', 
      'action' => 'upload', 
    '?' => array('upload' => '23') 
     ) 
    ); 

不過,我不認爲路由器連接::意在以這種方式工作。沒有查詢字符串數據被傳遞給上傳控制器。鑑於我在文檔中讀到的內容,我沒有想到這會起作用。

http://book.cakephp.org/2.0/en/development/routing.html 「路由是一種將URL映射到控制器操作的功能」 - 我猜這意味着查詢字符串params不適用於這種情況。

那麼有什麼辦法可以讓我按照我想要使用.htaccess的方式行事嗎? 我很驚訝沒有辦法做到這一點,因爲使用.htaccess縮短查詢字符串是一項常見任務。

像本教程顯示:http://www.elated.com/articles/mod-rewrite-tutorial-for-absolute-beginners/ 或apcahe文檔: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

NB:我清楚地知道,URL映射我想(尤其是上傳:27的語法與冒號)是對蛋糕公約。我的應用程序未配置爲像mysite.com/uploads/upload/27這樣的文檔,因爲文檔建議我應該這樣做。我更想知道如何按照我在第一個地方想象的方式來做到這一點。

+0

你們是不是要在內部僅此映射,即URL實際上不應該改變,或將重定向被罰款嗎? – ndm

+0

重定向也可以。我只是希望用戶能夠輸入所需的鏈接來獲取他們的模型。 – baordog

回答

0

如果一個重定向是確定的,那麼這應該這樣做:

RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] 

使用.htaccess文件位於app/webroot/,你應該是好的。看到這個例子:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -d [OR] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .* - [S=2] 
    RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

這是原來的.htaccess文件,修改,使重寫條件(即檢查請求的目標是否是一個實際存在的文件或文件夾)申請最後兩個重寫規則。在條件成立的情況下,這可以跳過最後兩條規則([S=2])。

又見Multiple RewriteRules for single RewriteCond in .htaccess

相關問題