Apache Redirect无法正常工作(小写/大写+斜杠问题)

时间:2015-07-21 14:12:57

标签: apache url mod-rewrite redirect url-rewriting

带有大写和斜杠的URL正在运行,但没有斜杠的大写不起作用。但是,无论有没有斜杠,小写都没有问题。所有内容都需要重定向到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]

以下是我应用的重写规则/条件。

launch () {
    git add -A .
    git commit -m "$1"
    git push heroku master
    echo "$1"
}

1 个答案:

答案 0 :(得分:1)

重定向“/ name”并且“/ Name”不重定的原因可能是由于Apache的mod_dir重定向/名称为/ name /,因为“/ var / www / html / name /”是一个实际的目录,而/ var / www / html / Name /则不是。

Apache看到你可能正在尝试访问/命名/即使你指定了/ name。但是,由于/ Name /不是目录,因此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并将其转换为小写。