2009-09-12 69 views
1

我有很多簡單的規則在這個網站上工作,所以我知道mod_rewrite工作。我只是無法弄清楚如何爲這種情況制定規則。我使用的是Joomla CMS,尤其是一個組件會產生可怕的URL,以複製網站上的其他(漂亮)網址。有一致的模式,所以我可以重寫網址,但這是我的聯盟使用正則表達式的方式。.htaccess文件需要複雜的重寫規則

的不良網址是這樣的:

/component/content/article/111-category-name/111-article-name.html?directory=2 

(以下簡稱「111」部分是產生給唯一ID的URL的類別和文章部分蛞蝓,所以這些數字是每個URL獨一無二的,根據該目錄的數量ID的directory=2變化正在瀏覽)

好網址(已在網站上,通過核心的Joomla SEF產生)是這樣的:

/category-name/article-name.html 

我知道我需要檢測到錯誤的URL,然後重寫刪除那些slu IDs ID和尾隨查詢字符串。我嘗試了一段令人尷尬的時間來解決問題,而且我認爲我甚至沒有太接近。

我對mod_rewrite /正則表達式大師的永恆感謝,他可以爲我打破這一點。謝謝! -Kelly

回答

1

試試這個規則:

RewriteRule ^component/content/article/[0-9]+-([^/]+)/[0-9]+-([^/]+\.html)$ /$1/$2? [L,R=301] 

在更換空的查詢字符串(如果存在)刪除原來的查詢字符串。而R=301標誌將導致外部永久重定向。

+0

非常感謝Gumbo!這對我有效。 – KellyRued 2009-09-12 23:01:25

2

假設這在你的本地.htaccess。

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L] 

如果在你的httpd.conf去向何方,我相信這是一個小的變化:

RewriteRule ^/component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L] 

但我是因爲我很少做這種方式不是100%肯定這一點。

您可以查詢字符串可選附加到最終網址:

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L,QSA] 
+0

是的,我在網站根目錄中使用.htaccess文件。我嘗試在沒有前導/的情況下添加第一條規則建議,並且它對網址沒有任何影響。任何想法可能是什麼問題?感謝您一直以來的幫助。 – KellyRued 2009-09-12 18:43:58