2010-05-27 71 views
10

小寫我想喜歡server.com/foo網址是區分大小寫。 但server.com/foo實際上得到mod_rewrite'd到server.com/somedir/foo轉換爲在的mod_rewrite規則

(假定在「somedir」所有的文件都是小寫)

所以現在的問題是,如何完成一個mod_rewrite的類似如下:

RewriteRule ^([^/]+)/?$ somedir/convert_to_lowercase($1) 

PS:這裏有一個方便的mod_rewrite作弊表 - http://dreev.es/modrewrite - 儘管它不能回答這個特定問題。

PPS:由於 BeeIgnacio 所有與此有關的幫助。 此外,這裏有一個相關的問題: RewriteMap activation

回答

14

首先,把下面的行放在.conf文件的<VirtualHost>部分。 (對我來說住在/etc/httpd/vhosts.d/00foo.conf。)

RewriteMap lc int:tolower 

你可以用任何你想要的名稱替換lc。 然後重新啓動Apache,您可以使用sudo service httpd restart

最後,在你的.htaccess文件添加此:

RewriteRule ^/(.*)$ /${lc:$1} 
+0

適用於此。你反彈httpd? – 2010-05-27 19:15:14

+0

可能不是。那是什麼意思? – dreeves 2010-05-27 19:19:04

+0

重新啓動它。發送一個SIGHUP在POSIX上工作。 – 2010-05-27 19:34:20

10
RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} 
+1

啊,謝謝,現在與我在網絡上其他地方找到的相匹配,但它仍然不適合我。我不明白你關於反彈httpd的其他評論。 – dreeves 2010-05-27 19:25:56

+0

我嘗試將以上添加到我的.htaccess並重新啓動httpd,並且它將整個域名關閉。錯誤日誌說:「這裏不允許重寫映射」。在哪裏我應該把Rewritemap語句?我發現的文檔顯示它連續兩行,如上所示。 (我只是堅持在特定的RewriteRule上方.htaccess)。 – Bee 2010-05-28 03:03:54

+1

@Bee:該文檔說「服務器配置,虛擬主機」,這意味着在右主配置流或''指令中。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap – 2010-05-28 03:13:20

2

我想使它成爲一個301重定向,而不是URL重寫,搜索引擎優化的目的:

RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} [R=301,L] 
+3

沒有緩存過期頭的301是非常糟糕的做法,因爲它在瀏覽器中被永久緩存。你將會生活多年。將'R = 301,L'改爲'R = 301,L,E = limitcache:1'並添加一個'Header always set Cache-Control「max-age = 3600」env = limitcache'指令。這將限制緩存1小時,同時仍然給你301重定向的SEO優勢。 – 2015-12-16 09:58:25