2014-04-01 31 views
0

我有一個Joomla組件「com_foo」時,通過所謂的正常工作......的Joomla URL重寫的組件,而不重定向

http://my.joomla.site/index.php?option=com_foo&id=1234

...但我需要的URL採用以下格式:

http://my.joomla.site/getfoo/1234

我能得到最接近的是具有以下的.htaccess重寫這導致重定向:

RewriteEngine On 

# My Rule 
RewriteRule ^getfoo/(.*)$ /index.php?option=com_foo&id=$1 [R=301,L] 

# Joomla rules 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
RewriteCond %{REQUEST_URI} !^/index\.php 
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [L] 

我似乎無法弄清楚如何使相同的事情「內部」工作W/O重定向。所以在我的例子上面發生的事情是:

[1] GET http://my.joomla.site/getfoo/1234 REDIRECTS TO 
[2] GET http://my.joomla.site/index.php?option=com_foo&id=1234 RENDERS PAGE 

我需要的是

[1] GET http://my.joomla.site/getfoo/1234 RENDERS PAGE 

幾乎所有的東西我嘗試在一個500錯誤。我覺得這應該是簡單的事情,但是現在讓我摔倒了。

回答

1

雖然您可能可以使用.htaccess文件工作,通過從組件代碼中分離SEF邏輯,您可以打開自己的管理噩夢。然而,Joomla確實提供了一種用您的自定義組件管理SEF url解析和生成的方法。通過將文件router.php放置在組件文件夾的根目錄下,Joomla會自動使用這個文件來生成和解析SEF URL。儘管下面的鏈接確實提供了有關如何實現的詳細信息,但我發現逆向工程核心組件router.php文件對我非常有幫助。

http://docs.joomla.org/Supporting_SEF_URLs_in_your_component

+0

謝謝!我認爲可能有更好的方法。我還沒有完全解決這個問題,因爲我在解析路由和隱藏的菜單時遇到了問題,但我很接近。 –

1

嘗試:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /index\.php\?option=com_foo&id=(.*)\ HTTP 
RewriteRule^/getfoo/%2\? [R=302,L] 

RewriteRule ^getfoo/(.*)$ /index.php?option=com_foo&id=$1 [L] 

上面會:

  • 重定向到http://my.joomla.site/index.php?option=com_foo&id=1234http://my.joomla.site/getfoo/1234顯示來自http://my.joomla.site/index.php?option=com_foo&id=1234頁面

信息閱覽當

  • http://my.joomla.site/getfoo/1234將會顯示來自http://my.joomla.site/index.php?option=com_foo&id=1234頁面中的信息

更改R=302R=301當您確定重定向工作。

+0

謝謝你爲這個,這肯定有助於我看到一個更好的方式來處理這件事。不幸的是,在我的設置中,這導致了另一個500.我嘗試過改變一些東西,我最終在500或重定向循環。我也會嘗試Brian Bolli的建議,將其應用到路由器中,如果這樣做,我不需要重寫。 –