2012-10-11 28 views
4

快速參考:area =門戶類型頁面。使用ColdFusion控制器的SEO網址?

我想舊網址http://domain.com/long/rubbish/url/blah/blah/index.cfm?id=12345 重定向到http://domain.com/area/12345-short-title

http://domain.com/area/12345-short-title應顯示內容。

我制定了到目前爲止做到這一點,我可以使用Apache所有URL寫

http://domain.com/index.cfm /long/rubbish/url/blah/blah/index.cfm?id=12345 和 http://domain.com/index.cfm /區域/ 12345,短標題

的index.cfm要麼服務器中的內容或應用永久重定向,但它需要從數據庫中獲取標題和區域信息第一。

本網站共有50,000頁。對於子域重定向以及永久子域,我也有其他想法,並控制它們如何通過index.cfm進行操作。

基礎架構希望通過儘可能多的Apache重寫來完成,我們認爲它會更快。但是,如果我們需要獲取每個頁面的區域和標題信息,我不確定我們有這個選擇。

有沒有人有這方面的經驗,可以提供輸入?

-

一些需要注意的,我假設,我們將必須繼續在舊格式的網站上使用的所有內部URL。全部改變它們將是一項巨大的工作。

這意味着所有內部URL必須每次都使用永久重定向。

+0

您打算處理多少個區域?這是一個相當靜態的列表? –

+0

那裏有100個地方,並有50,000頁。它每天增長/變化。地區是太空任務,頁面滿足這些任務,屬於特定地區。 –

+0

我不明白你的意思是什麼_「......需要首先從數據庫中獲得標題和區域信息。」_ - 爲什麼你需要這些? –

回答

3

與其將這兩組網址重定向到相同的腳本,爲什麼不簡單地將它們發送到兩個不同的腳本?

只要是這樣的:

RewriteCond ${REQUEST_URI} !-f 
RewriteRule ^\w+/\d+-[\w-]+$ /content.cfm/$0 [L] 

RewriteCond ${REQUEST_URI} !-f 
RewriteRule ^.* /redirect.cfm/$0 [L,QSA] 

然後,redirect.cfm可以查找替換URL,做301重定向,而content.cfm簡單地提供內容。

(您還沒有指定您的CF怎麼設置,你可能需要更新JRUN/Tomcat的/其他配置以支持/content.cfm/*/redirect.cfm/* - 它會做同樣的,因爲它是對index.cfm完成)


出於性能考慮,你還是要避免數據庫命中,如果你能重定向,你可以做到這一點通過生成重寫規則執行的Apache側301重定向每一頁。這可以很簡單,只需向該行添加一行即可。htaccess文件,像這樣:

<cfset NewLine = 'RewriteRule #ReEscape(OldUrl)# #NewUrl# [L,QSA,R=301]' /> 

<cffile action="append" file="./.htaccess" output=#NewLine# /> 

(其中OLDURL和NEWURL已經從數據庫中查到的。)

您還可能要使用mod_alias redirect代替mod_rewrite的重寫規則,在句法將調查Redirect permanent #OldUrl# #NewUrl# - 由於OldUrl是一個確切的路徑匹配,它可能會更快。

注意,這些規則將需要上述redirect.cfm重定向前的檢查做 - 如果他們在你不能簡單地做一個追加相同的.htaccess,但如果是在該網站的一般Apache配置文件,然後將首先檢查.htaccess規則。另外,根據Sharon的評論,你應該驗證你的Apache是​​否會處理5萬條規則 - 雖然我已經看到它報告說「成千上萬」基於正則表達式的Apache重寫非常好,但可能會有一些限制(或者至少需要分割多個文件)。

+0

謝謝,我會牢記這一點。我更關心使用ColdFusion執行我所描述的操作的性能和必要性。 –

+0

呵呵,剛剛編輯 - 一旦CF不再需要再次查找URL - 它可以將生成的規則附加到.htaccess文件 –

+0

現在很棒!謝謝 –

0

使用Apache重寫只會更快,如果他們是靜態重寫,或者他們都遵循一些規則,你可以用.htaccess文件中的正則表達式編寫。如果您必須觸摸數據庫以獲取這些重定向,那麼在.htaccess中執行它可能沒有意義。

另一種方法是大多數CMS用於處理虛擬目錄和重定向的方法。位於站點根目錄的index.cfm文件處理所有傳入請求並返回正確的頁面和路徑。 MURA CMS使用這種方法(以及Joomla和大多數其他方法)。

基本上,您在傳入請求上使用CGI.path_info變量,在數據庫中搜索它,並重新定向到新的路徑。像往常一樣,Ben Nadel對如何使用這種方法有很好的瞭解:Ben Nadel: Using IIS URL Rewriting And CGI.PATH_INFO With IIS MOD-Rewrite

但是,如果您想通過重定向,您可以使用.htaccess從url字符串中完全刪除「index.cfm」所有傳入請求到根URL的東西,看起來像這樣在你的.htaccess:

RewriteEngine On 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d 
RewriteRule ^([a-zA-Z0-9-]{1,})/([a-zA-Z0-9/-]+)$ /$1/index.cfm/$2 [PT] 

基本上,這會像http://www.yourdomain.com/your-new-url/重定向到http://www.yourdomain.com/index.cfm/your-new-url/其中由博客帖子上面描述它可以被處理。用戶永遠不會看到index.cfm。

+0

謝謝,我看過本文的文章。我的'問題'描述了/index.cfm/的使用,我期望使用CGI.PATH_INFO。所以我認爲你所描述的是我已經打算做的。有趣的是,在嘗試了Mura之後,我終於實現了SEO URL解決方案。這和我打算解決網站被索引通過許多子域的問題! –