2011-10-13 88 views
1

我在routing.yml配置此模式:Symfony2中和mod_rewrite的網址無法正常工作

/{customer}/{site}/content/{id}.{format} 

現在我想省略/{customer}/{site}一部分,並與一個重寫規則重寫。 Symfony已經有一個.htaccess與重寫規則。我把它修改爲

RewriteRule ^(.*)$ app_dev.php/foo/bar/$1 [QSA,L] 

但是,當我指出我的瀏覽器http://localhost/content/42.html我得到這個異常:

No route found for "GET /content/42.html" 

我撥弄了一下週圍,發現了,爲什麼會出現這樣的問題:Symfony的使用_SERVER['REQUEST_URI']變量來解析請求,但是當您使用mod_rewrite時,此var中的URL不是預期的/foo/bar/content/42.html,而是content/42.html

我可以用我自己的替換app_dev.php並覆蓋REQUEST_URI但我不想破解Symfony。

編輯: 卸下/{customer}/{site}部分從路由配置是無解的,因爲我的工作多客戶/多站點應用程序,我想隱藏通過一個URL的部分,所以我能指出我的瀏覽器到www.my-fancy-site.com和Apache重寫這個URL到/foo/bar/content/42.html

回答

2

好,你問:

做某事,如:

app/config/routing.yml: 

blog: 
    pattern: /{customer}/{site}/content/{id}.{format} 
    defaults: { _controller: TestBundle:Blog:view ,customer:foo, site:bar } 

,並在所有

編輯請勿觸摸重寫規則.htaccessapp_dev.php:爲了您的更新問題,你將也需要這個:

app/config/routing.yml: 

blog: 
    pattern:/
    defaults: { _controller: TestBundle:Blog:view, customer:foo, site:bar, id:4 } 

但是這個方式URL保持http://host/。我會使用一個受歡迎的控制器,然後簡單地重定向到其他路由...一個重定向應該沒問題。

更確切地說:您需要兩條路線和一個控制器才能重定向到您的路線。

請RTFM這裏: http://symfony.com/doc/2.0/book/controller.html#route-parameters-controller-arguments

這裏: http://symfony.com/doc/2.0/book/routing.html

+0

謝謝你的小費,但這並不爲我工作,我清楚我的問題。對於令人困惑的問題抱歉。 – prehfeldt

+0

好主意,謝謝。 – prehfeldt

+0

@prehfeldt我認爲解決方案是現貨,它應該工作。實際的問題不是URL重寫,而是你定義路由的方式。我對$ _SERVER [「REQUEST_URI」]也很困惑,但實際上這不是問題。 考慮一下http://localhost/content/42.html 的示例一旦請求觸及了app_dev.php或app.php,那麼symfony將查找route /content/42.html,因此您需要在此處定義此路由symfony的。 –