2015-07-21 74 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并将其转换为小写。