2014-10-02 38 views
17

我有一個Joomla 3.3.6(編輯:3.5.)中只有3個級別組織的網站:得到URL擺脫ID(類別和文章)的(的Joomla 3.3/3.4/3.5)

  • 四大類(我, II,III,IIII)
  • 每一箇中的一些中間類別(A,B,C,...)
  • 最後文章分割
  • 兩種語言(烯,PT)

URL設置Search Engine Friendly URLsUse URL rewritingAdds Suffix to URLmultilanguage support後,應該是形式:

http://www.example.com/en/bigcatiii/intercatA/articlex.html

但正如許多其它具有的Joomla安裝,並要求自的Joomla,嬰兒,版本的解決方案,我:

http://www.example.com/en/bigcatiii/666-intercatA/articlex.html

,其中666是來自地獄的數字,指示沒有目的的類別ID

現在瀏覽的答案,我發現了這樣的回答:

Edit 「components/com_content/router.php「 
(You’ll probably have to re-do this step every time you update Joomla.) 
Replace the lines 38 and 290 with: 
$advanced = $params->get('sef_advanced_link', 1); 

and Replace line 426 with 
->where($db->quoteName(‘alias’) . ‘ = ‘ . $db->quote($segment)); 

嗯,首先,線路426已經像在原來的。其次,這並不能解決問題。它做的工作有:

http://www.example.com/en/bigcatiii/intercatA/articlex.html

但是,如果你瀏覽到它打破機智錯誤:

http://www.example.com/en/bigcatiii/intercatA.html

另外,我注意到,ID號不同。雖然整個URL被

http://www.example.com/en/bigcatiii/666-intercatA/articlex.html

同一類別描述頁面

http://www.example.com/en/bigcatiii/333-intercatA.html

另外還有一點聲音更好另一種解決方案,但還沒有工作的基礎上,的.htaccess

RewriteEngine on 
RewriteBase/
RewriteRule (\d+)-([^/]*) $2 [R=301,L] 

URLs顯示正常,但沒有找到頁面。如果我們能夠使用.htaccess而不是改變Joomla核心,那將會更好。

不過,改變Joomla核心就好了,如果這個其他谷歌搜索的建議是有效的。

Copy 「components/com_content/router.php」 to 「/templates/your-template/html」 

這意味着一旦你移動router.php你的「本地」,你就不需要在升級之後重做所有的東西。 (當然,除非router.php更新,以防止再次鏡像。)

感謝您抽出時間來解決這個難題!

參考

1- Change/ Remove Article ID in URL?

2- Removing the Article ID number

3- How to remove article id in url?

4- Remove article id from url for joomla 3.0

5- Enabling SEF

6- Remove article id from joomla 3 URL

7- Remove article id from joomla 3 URL

8- .htaccess redirect rule

9- Test .htaccess


編輯(2016 /月/ 02):新的賞金爲Joomla最新版本3.5

+0

期待找到一個溫柔的靈魂誰有答案... – 2014-10-08 18:04:47

+0

經過幾個星期等待一些答案,獎金被丟棄,並再次(自動)重新啓動。現在只有4個小時的獎勵獎勵,我沒有和我在一起的Joomla,沒有時間檢查這個答案是否符合要求。所以,關於未經檢查的答案的準確性,我決定獎勵這項獎勵。如果結果不對,我會請作者進行編輯。如果在接下來的日子裏有其他更好的答案,我只能改變接受的答案。非常感謝您的努力,@achedeuzot。 – 2014-10-13 00:20:18

+0

我現在在等待更好的答案。這仍然是一個問題嗎?有更好的,簡單的解決方案嗎? – 2015-03-24 02:42:22

回答

1

尋找到它後,我發現了一些有用的東西信息。 免責聲明我不使用Joomla,並沒有嘗試過這個工作安裝,這些只是一些搜索&閱讀源代碼的結果。無論如何,這是我發現的。

從我gathererd,似乎改變

$advanced = $params->get('sef_advanced_link', 0); 

$advanced = $params->get('sef_advanced_link', 1); 

應該夠了。 要小心,儘管,使用這個選項,可能兩個URL(有和沒有ID)將可用,這是不利於搜索引擎優化。問題在於404,但這似乎是Joomla路由系統的問題。您可以使用僅配置但從未使用過的菜單鏈接來補償404(參見下文)。

你的問題的一些來源:

  • 例如,在它們的路由,他們使用的菜單中找到類別ID(Line ~385 // We get the category id from the menu item and search from there
  • 對於每個URL段(由/分隔),他們首先搜索類別別名,所以一定要檢查你的別名。如果他們無法在類別中找到別名,則他們依靠其搜索查詢的URL中的ID(Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid'])
  • 當categoryID或articleID附加到菜單時,他們將刪除類別ID $query['catid'],因爲他們知道他們有唯一的全球名稱(行〜69)

因此,一種解決方案是做到以下幾點:

你可以嘗試,併爲每個類別和每篇文章創建一個菜單項。即使菜單沒有顯示在任何地方,只在管理界面中配置,它將爲類別和文章創建全局唯一路由別名,這將使Joomla找到正確的文章/類別。據我所知,當一個類別或文章有一個菜單項,那麼只有標題別名被使用。但是由於它們沒有,他們使用id + slug的組合來定位資源。

因爲很多人都在抱怨這一點,應該固定在的Joomla 3.5

參考&討論:

要完成上一個明亮的音符,似乎the developers are aware of the limitations

+0

好吧,謝謝!現在,根據你的理解,如果我保證我的類別別名彼此不同,你能否提供一個簡單的黑客來讓Joomla在這個用戶保證下工作?(我知道那個解決方案將不會是我們在Joomla 3.5的主要卡車上看到的,因爲您不能將這個責任交給用戶,但作爲解決方法,我將在新版本不可用的情況下承擔這一責任) – 2014-10-12 23:15:27

+0

I'米不是sur我理解你的問題,但你有兩種可能性:使用獨特的別名創建一個隱藏菜單,所以Joomla有這個「查找表」,或者你可以嘗試「在路由器上」設置「未設置」catid「,但你必須測試明確,以確保它不會制動其他任何東西。對不起,我沒有安裝在手邊測試它,但我遠離Joomla專家;) – achedeuzot 2014-10-12 23:37:12

+0

它不適用於Joomla 3.4。 1。我只需要從類別中刪除第一個ID。 – Mardzis 2015-04-02 09:12:09

2

我剛剛新安裝的一個Joomla 3.5和老方法爲我工作。由於路由器文件中的某些內容已被修改,因此必須在joomla升級後重復該過程。

行現在在./components/com_content/router.php 34和295。

再次改變成01使其變成:

$advanced = $params->get('sef_advanced_link', 1); 


我的URL是例如http://joomla.lan/en/category-en-gb/article-en-gb 正常工作與Search Engine Friendly URLs上。

隨着Adds Suffix to URL切換到Yes一個.html被追加到URL。
Use URL RewritingUnicode Aliases可選。在IIS7或Apache上使用URL重寫引擎時,必須將htaccess.txt重命名爲.htaccesswebconfig.txt重命名爲webconfig。請注意,某些託管服務器具有限制性的服務器配置。如果您得到500 internal server error,則可能需要編輯.htaccess並通過添加前面的#註釋掉Options +FollowSymlinks和/或Options -Indexes和/或RewriteBase /行。後者已經在Joomla 3.5中停用。當Joomla安裝在子文件夾而不是Web根目錄中時,設置是有用的。

在其他服務器上設置Use URL RewritingNo


我無法重現您的問題,一切工作正常與這兩個代碼編輯。請再次嘗試,如果無法解決,請發佈確切的行爲(網址,錯誤aso。) 如果無法解決問題,則可能需要重新安裝源代碼。

+0

感謝您花時間和精力來幫助解答此問題。根據你的解釋,我會給你賞金(在它到期之前),但我不會將它設置爲接受的答案。我相信,如果你所說的話,我會保持舊的答案被接受。再次發送。 – 2016-05-09 18:00:57

+0

正如你所說的,你使用的是URL重寫引擎,在IIS7和Apache上有什麼好處。你是否記得將'htaccess.txt'重命名爲'.htaccess'?我在這一點上回答了這個問題。 – 2016-05-09 18:40:53

+0

它對我很好,謝謝.. – 2016-07-13 02:10:12