2015-05-04 20 views
0

我們剛剛從IIS服務器移動到Apache,並且我們試圖讓我們的鏈接與Apache區分大小寫。我們有很多頁面,所以我要通過目錄進行目錄更改。我正在測試它,以確保它的工作。我正在添加一個.htaccess文件以將傳入的網址轉換爲小寫。我使用下面的,因爲我不想與httpd.config爛攤子:試圖在子目錄中使用htaccess將url更改爲小寫

RewriteEngine On 
RewriteBase /advertising/ 

# 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 [R=301,L] 

正如你可以看到我在advertising目錄測試這一點,但它一直重定向鏈接到根夾。我清除緩存並再次檢查,甚至使用另一臺計算機進行測試。網址仍然轉換爲根目錄。我究竟做錯了什麼?

+1

你以前'/ $ 1'一個斜線,這使得它忽略RewriteBase。另外,你不需要模式中的斜槓。只需使用'^(。*)'。 –

回答

0

確保在你的上重定向使用相對URI即

RewriteEngine On 
RewriteBase /bible/ 

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

# If there are no uppercase letters left, redirect 
RewriteCond %{ENV:REDIRECT_STATUS} =200 
RewriteRule ^((?!.*[A-Z]).+)$ $1 [R=302,NE,L] 
+0

這會影響/廣告中的子域嗎? – JohnBlood

+0

@mike當我在帶子目錄的目錄中試用htaccess時,它給了我這個錯誤/folder/file.htm/file.htm/file.htm。爲什麼?我需要這個來覆蓋子目錄。 – JohnBlood

+0

這個重定向之前的原始URL是什麼?重定向之後它變成了什麼?在Chrome開發工具 – anubhava