【问题标题】:Apache Redirect not working (issue with lowercase/uppercase + slash)Apache 重定向不起作用(小写/大写 + 斜杠问题)
【发布时间】:2015-10-11 01:20:30
【问题描述】:

带有大写和斜杠的 URL 可以正常工作,但不带斜杠的大写 URL 不能正常工作。但是,无论有没有斜线,小写字母都没有问题。一切都需要重定向到www.domain.com/name/homepage.html

例如:

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]

【问题讨论】:

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


    【解决方案1】:

    “/name”被重定向而“/Name”没有被重定向的原因,可能是由于Apache的mod_dir将/name重定向到/name/,因为“/var/www/html/name/”是一个实际的目录,而 /var/www/html/Name/ 不是。

    Apache 发现即使您指定了 /name,您也可能会尝试访问 /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
    

    如果您想将 ANY Name 更改为 name,请使用 RewriteMap:

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

    这将采用任何以大写字母开头的 URI 并将其转换为小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多