2013-11-15 63 views
1

我一直在試圖弄清楚如何讓它工作一段時間,這對我沒有任何意義。到目前爲止,我放在一起迫使它將/ BLAH中的lowercase.html文件引用到/blah.html,但我似乎無法將/BLAH.html放在/blah.html中。htaccess將allcaps.html重寫爲lowercase.html

這只是將SomeCapS.html(或.HTML我猜)改爲somecaps.html。

關於如何解決此問題的代碼的任何想法:

RewriteEngine On 
RewriteBase/

# http://www.askapache.com/htaccess/rewrite-uppercase-lowercase.html 
# If there are caps, set HASCAPS to true and skip next rule 
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1] 

# Skip this entire section if no uppercase letters in requested URL 

RewriteRule ![A-Z] - [S=28] 

# Replace single occurance of CAP with cap, then process next Rule. 
RewriteRule ^([^A]*)A(.*)$ $1a$2 
RewriteRule ^([^B]*)B(.*)$ $1b$2 
RewriteRule ^([^C]*)C(.*)$ $1c$2 
RewriteRule ^([^D]*)D(.*)$ $1d$2 
RewriteRule ^([^E]*)E(.*)$ $1e$2 
RewriteRule ^([^F]*)F(.*)$ $1f$2 
RewriteRule ^([^G]*)G(.*)$ $1g$2 
RewriteRule ^([^H]*)H(.*)$ $1h$2 
RewriteRule ^([^I]*)I(.*)$ $1i$2 
RewriteRule ^([^J]*)J(.*)$ $1j$2 
RewriteRule ^([^K]*)K(.*)$ $1k$2 
RewriteRule ^([^L]*)L(.*)$ $1l$2 
RewriteRule ^([^M]*)M(.*)$ $1m$2 
RewriteRule ^([^N]*)N(.*)$ $1n$2 
RewriteRule ^([^O]*)O(.*)$ $1o$2 
RewriteRule ^([^P]*)P(.*)$ $1p$2 
RewriteRule ^([^Q]*)Q(.*)$ $1q$2 
RewriteRule ^([^R]*)R(.*)$ $1r$2 
RewriteRule ^([^S]*)S(.*)$ $1s$2 
RewriteRule ^([^T]*)T(.*)$ $1t$2 
RewriteRule ^([^U]*)U(.*)$ $1u$2 
RewriteRule ^([^V]*)V(.*)$ $1v$2 
RewriteRule ^([^W]*)W(.*)$ $1w$2 
RewriteRule ^([^X]*)X(.*)$ $1x$2 
RewriteRule ^([^Y]*)Y(.*)$ $1y$2 
RewriteRule ^([^Z]*)Z(.*)$ $1z$2 

# If there are any uppercase letters, restart at very first RewriteRule in file. 
RewriteRule [A-Z] - [N] 

RewriteCond %{ENV:HASCAPS} TRUE 
RewriteRule ^/?(.*)$ /$1.html 

非常感謝

+0

你有權訪問你的虛擬主機/服務器配置嗎? –

+0

不幸的是,它是一個運行cPanel的共享主機,所以我只能訪問.htaccess文件,這就是爲什麼我不得不使用上面相當蹩腳的去帽去除器: – Salo

回答

0

您需要使用內置的重寫映射指令,因爲這有很大的問題。首先,內部重定向的數量上限爲10個。這意味着您只能在內部重定向10次,而使用11個大寫字母的URI會導致太多內部重定向,從而導致500服務器錯誤。

The Apache documentation has a page for RewriteMaps

但問題是重寫地圖必須在虛擬主機/服務器配置中聲明。而不是在htaccess文件中。如果您無法訪問,則可能需要編寫一個腳本來爲您執行此操作。喜歡的東西:

RewriteEngine On 
RewriteRule [A-Z] /tolower.php [L] 

而在tolower.php你需要看$_SERVER['REQUEST_URI'],然後更改所有的字母爲小寫,那麼無論瀏覽器重定向到新的URL沒有任何大寫字母或內部負載該頁面並代表瀏覽器返回。

+0

嗯,所以沒有什麼可以添加到。 htaccess?我只是測試了一個頁面,其中包含了24個大寫的網址,並且它重定向了它。我猜測它是因爲我沒有在文件中的任何地方表示重定向,但是我沒有真的看到自己使用超過10個字符的任何文件名 此外,我將試圖在不久的將來將其轉移到一個完全靜態的主機(如果它很重要的話,getforge.com),我不確定如果PHP的替代方案會在那裏工作(htaccess似乎仍然存在) – Salo

+0

@Salo嗯,你是對的,在本地測試它,它不受內部遞歸限制的影響。 –