2011-02-04 63 views
0

我搜索網,回答我的問題,沒有任何運氣,所以她的老話:mod_rewrite的力小寫的URL

我重做我的搜索引擎優化的目的mod_rewrite的,我想所有的URL是小寫,爲例如:

http://BLAbla.com/ 

成爲

http://bla.com/ 

目前我的.htaccess看起來像這樣:

RewriteEngine on 

RewriteMap lc int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lc:$1} [R=301,L] 

RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule (.*)$ http://www.example.com/$1 [R=301,L] 

RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L] 

RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L] 

但是當我運行http://localhost/site/我得到了錯誤500.我只知道基本的reg ex和非常有限的mod_rewrite,所以我不能在這裏選擇錯誤。如果我刪除rewritemap行,頁面不會給出任何錯誤。 rewritemap是不是由我的服務器或某物支持?

關於.htaccess文件的任何其他意見是非常非常歡迎的。

感謝您的時間。

回答

5

@Esben

重寫主機名有點棘手。你有權訪問服務器錯誤日誌嗎?因爲這可能有關的500

它括在引號中的參數只是爲了清楚起見個好主意的原因一些使用信息:

RewriteMap lc int:tolower 
RewriteCond "%{REQUEST_URI}" "[A-Z]" 
RewriteRule "(.*)"   "${lc:$1}" [R=301,L] 

[L]是要迫使該結束處理這個請求,這意味着如果有更多的工作要做到URI,它會在重新提交請求時發生。你可能要考慮配料您的修改提出要求只有經過改寫(munging)過程中一旦:

RewriteMap lc int:tolower 
RewriteCond "%{REQUEST_URI}" "[A-Z]" 
RewriteRule "(.*)"   "${lc:$1}" [E=REDIRECT:TRUE] 

RewriteCond "%{HTTP_HOST}" "!^www\." [NC] 
RewriteRule "^"    "-"  [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE] 

什麼是以下意欲何爲?

RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L] 

的影響(儘管時髦正則表達式)是/「如果REQUEST_URI在結束」「剝離其關閉和重定向」。那是你要的嗎?請記住,東西都在一個.htaccess文件有點不同..

這:

RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L] 

它看起來像你想說「更改任何‘富/酒吧’到「指數。 php?worker = foo & params = bar「'。如果這是正確的,它可能不會起作用。由於您處於.htaccess文件中,因此您正在與文件系統路徑匹配,而不是的URI。

那麼試試這個:

RewriteMap "lc"     "int:tolower" 

RewriteCond "%{REQUEST_URI}"  "[A-Z]" 
RewriteRule "(.*)"    "${lc:$1}" [E=REDIRECT:TRUE] 

RewriteCond "%{HTTP_HOST}"  "!^www\." [NC] 
RewriteRule "^"     "-"   [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE] 

RewriteCond "${ENV:REDIRECT}" "!TRUE" 
RewriteRule "^"     "-"  [SKIP=2] 
RewriteCond "${ENV:PREFIX_WWW}" "TRUE" 
RewriteRule "(.*)"    "http://www.${HTTP_HOST}/$1"  [R=301,L] 
RewriteRule "^"     "-"        [R=301,L] 

RewriteRule "^([^/]+)/([^/]?)$" "index.php?worker=$1&params=$2" [PT] 

我不知道有關的SKIPRewriteCond陳述與RewriteRule S混合的效果,但給上面一個嘗試,看看如果你再靠近。