如果你去像這樣的網址:http://stackoverflow.com/questions/9155602/
地址欄將更新到http://stackoverflow.com/questions/9155602/redirect-existing-file-to-different-url-using-mod-rewrite
。這不是用JavaScript完成的,也不是用硬刷新完成的,我最好的猜測是它使用mod_rewrite完成;然而,它如何知道沒有服務器端處理與PHP文章的標題?如何重寫SEO友好的網址,如stackoverflow
我剛剛更新我的網站使用SEO友好的網址,它曾經是/shows.php?id=review-1
,現在它的/review/1/super-baseball-2020
。在最後的文本實際上並沒有真正的問題,當涉及到我的改寫是:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [L,NC]
我現在要確保谷歌不會打我重複的內容,以及書籤正確轉發的路徑如下:
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC]
RewriteRule^/review/1/super-baseball-2020/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-2(?:&|$) [NC]
RewriteRule^/review/2/aero-fighters-2/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-3(?:&|$) [NC]
RewriteRule^/review/3/aero-fighters-3/? [R=301,L,NC]
.... and so on ....
該解決方案是非常短視的,是成千上萬的行放入我的.htaccess。
我懷疑這個功能是使用'mod_rewrite'完成的。會發生什麼情況是,對stackoverflow.com/*anything*的任何請求都由相同的服務器端代碼處理,然後解析該URL並*路由*請求代碼以使用問題ID爲頁面提供內容。問題標題被服務器忽略,請嘗試訪問http://stackoverflow.com/questions/9168364/bouncing-fluffy-muffins – millimoose 2012-02-06 22:46:03
通常mvc應用程序將路由所有輸入的請求到相同的腳本(前端控制器),這將解析請求自己,並將操作委託給正確的控制器類。 – dqhendricks 2012-02-06 22:52:23