2016-10-10 121 views
1

我訪問file.php編寫mydomain.com/file。我需要能夠訪問也寫mydomain.com/FILE.htaccess不區分大小寫的目錄

在.htaccess我用下面的規則刪除擴展:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ 
RewriteRule ^(.+)\.php $1 [R=301,L] 

如果該規則應予以更改─這是給你的。在規則

+0

它在專用網絡。我需要儘量減少用戶的錯誤。 –

+0

保持您的文件爲小寫,並使用'RewriteMap'將每個URL轉換爲小寫。 (需要訪問Apache服務器配置) – anubhava

+0

這些文件是小寫的。我應該在config中進行哪些更改,以及如何使用RewriteMap?你能以答案的形式寫下來,所以我可以標記它是否正確? –

回答

1

在Apache或vhost配置定義這個RewriteMap

RewriteMap lc int:tolower 

然後你的.htaccess裏面有一個額外的規則爲小寫全大寫的URI:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301,NE] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP [NC] 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC,NE] 

# convert each REQUEST_URI to lowercase 
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [R=301,L,NE] 

# internally add .php 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+0

我應該在.htaccess中寫入'RewriteMap lc int:tolower'嗎?我明天會檢查並寫信。謝謝! –

+1

不,'RewriteMap lc int:tolower'必須放在'httpd.con'或你的vhost配置文件中。 .htaccess不允許'RewriteMap' – anubhava

-1

使用[NC]標誌

使用[NC]標誌的使重寫規則中一 不區分大小寫的方式進行匹配。也就是說,它不關心字母 是否在匹配的URI中顯示爲大寫或小寫。

https://httpd.apache.org/docs/current/rewrite/flags.html

+1

這不會自行工作,因爲對於不同的請求,'$ 1'將被替換爲不同的標記。 – arkascha

+0

是的,這不起作用。 –

-1

你需要採取的方面的護理:先不區分大小寫的匹配和第二的情況下轉換爲小寫。

Apache的重寫模塊提供了NC標誌第一個方面和某種程度上更復雜的方法來第二個:

RewriteEngine On 

# remove trailing slash (/) if no such folder exists 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /${lc:$1} [NC,L,R=301] 

# internally rewrite to a php script if it exists and convert to lower case 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ /${lc:$1}.php [NC,L] 

# redirect to .php-less link if requested directly 
RewriteRule ^(.+)\.php$ ${lc:$1} [NC,L,R=301] 

我的印象中,雖然你的原設定的重寫規則並沒有真正達到什麼你試圖,即使它在語法上也是無效的。這就是爲什麼我改變了幾個方面。

+0

這不起作用。你可能會建議另一種實現這種方式的方法 –

+0

@TarlanMammadzada你是否願意詳細說明_what_不會起作用_why_?或者你只是「假設」? – arkascha

+0

我查過了。即使在小寫情況下給出內部錯誤 –