2015-07-21 97 views
1

帶大寫和斜槓的URL正在工作,但不帶斜槓的大寫不起作用。但是,小寫字母在沒有斜線的情況下沒有問題。一切都需要重定向到www.domain.com/name/homepage.htmlApache重定向不起作用(小寫/大寫+斜槓問題)

例:

www.domain.com/Name - Do not work 
www.domain.com/Name/ - Works 
www.domain.com/name - works 
www.domain.com/name/ - works 

這裏是重寫規則/條件我申請。

RewriteCond $1 [A-Z] 
RewriteRule ^/(.*)$ /${lowercase:$1} 

RewriteCond %{QUERY_STRING} ^(.*)StringName=(.*)$ 
RewriteRule ^/home(.*)$ /%2/? [R=301,NC,L] 

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

RewriteRule ^/(.*)/$ /$1/homepage.html [PT,L] 

回答

1

認爲「/名」重定向和「/名稱」不是,究其原因可能是由於這樣的事實,Apache的mod_dir被重定向/名稱/姓名/因爲「在/ var/www/html等/名稱/「是實際的目錄,而/ var/www/html /名稱/不是。

Apache看到你很可能試圖訪問/名稱/即使你指定/名稱。但是,由於/名稱/不是一個目錄,mod_dir不會爲您糾正它。

這可以使用下面的規則來解決:

RewriteCond %{REQUEST_URI} ^/Name(/?)$ [NC] 
RewriteRule (.*) http://example.com/name/homepage.html 

如果你也想捕捉喜歡的請求:

http://example.com/Name/something.html 

並重定向到:

http://example.com/name/something.html 

你可以用這個代替:

RewriteCond %{REQUEST_URI} ^/Name(.*)$ [NC] 
RewriteRule ^/Name(.*) http://example.com/name$1 

如果你想改變任何名稱來命名使用RewriteMap指令:

RewriteMap lc "int:tolower" 
RewriteRule ^([A-Z].*) "${lc:$1}" 

這將需要以大寫字母開頭的URI並將其轉換爲小寫。