【问题标题】:Changing last part of URL to be uppercase using htaccess?使用 htaccess 将 URL 的最后一部分更改为大写?
【发布时间】:2013-12-22 01:08:50
【问题描述】:

不确定这是否是解决问题的明智方法,即...

我有一堆用户目录,它们构成了他们 url 的一部分,例如

www.mysite.com/users/USERDIR

当我创建网站时(从那时起),用户目录是使用大写字母创建的。我希望我没有,但它已经完成了。因此,如果有人输入 www.mysite.com/users/userdir - 它找不到该目录 - 它必须是大写的,例如 www.mysite.com/users/USERDIR。

我在想……

a) 有没有办法告诉 htaccess “在查找 url 时忽略大小写?”

b) 有没有办法在 htaccess 中处理这个问题,所以无论用户使用什么情况,我的服务器总是将 USERDIR 转换为大写字母?我需要考虑到有些人可能会键入 www.mysite.com/users/USERDIR/index.php,而 www.mysite.com/users/USERDIR/ 则带有斜杠。

我发现了一些从小写字母转换为大写字母的代码(如下),但是有没有办法说“只对 mysite.com/users/ 之后的任何内容执行此操作,直到结尾或下一个斜杠,如果一个被输入”?

注意 - 以下内容与我在 re case 之后的内容相反 - 我只是还没有重新编码以将其转换为下限。

RewriteEngine On
RewriteBase /

# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]

# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] - [S=28]

# Replace single occurance of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2

# If there are any uppercase letters, restart at very first RewriteRule in file.
RewriteRule [A-Z] - [N]

RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]

感谢观看!

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite case


    【解决方案1】:

    a) is there a way to tell htaccess "ignore the case when looking for the url?"

    是的,有。在规则中使用 NC 标志来进行大小写忽略匹配。

    no matter what case the user uses, my server will ALWAYS convert the USERDIR to capitals?

    如果您可以访问 Apache 配置,那么更简单的是在 Apache 配置中添加这一行:

    RewriteMap uc int:toupper
    

    然后在您的 .htaccess 中使用此规则将您的 URI 转换为 upper case

    RewriteRule ^(users)/(.*?[a-z]+.*)$ /$1/${uc:$2} [R,L]
    

    【讨论】:

    • 是的,您需要在 httpd.conf 更改后重新启动 Apache 服务器
    • 加油伙伴。它正在工作,但是在“用户”目录大写之后制作一切。是否有可能只在用户大写之后创建目录,而将其余的 url 单独放置,或者这是否超出了 htaccess 的职责范围?因此,与其重写将 users/danny/index.php 更改为 users/DANNY/INDEX.php,不如将其更改为 users/DANNY/index.php
    • 是的,也可以这样做。使用此规则:RewriteRule ^(users)/(.*?[a-z]+[^/]*)/index\.php$ /$1/${uc:$2}/$3 [R,L]
    • 我的错误 - 我认为它可以工作,但只是我的浏览器记住了不同的情况。我是否将 RewriteMap uc int:toupper 直接添加到 httpd.conf?
    • 是的,需要将行添加到httpd.conf,然后需要重新启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2018-08-15
    • 2017-03-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多