【问题标题】:mod_rewrite force lowercase urlsmod_rewrite 强制小写网址
【发布时间】:2011-06-21 01:59:24
【问题描述】:

我在网上搜索了我的问题的答案,但没有任何运气,所以她走了:

为了 SEO 目的,我正在重做我的 mod_rewrite,我希望所有 url 都是小写的,例如:

http://BLAbla.com/

变成

http://bla.com/

目前我的 .htaccess 看起来像这样:

RewriteEngine on 

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]  
RewriteRule (.*)$ http://www.example.com/$1 [R=301,L]

RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L]

但是当我运行http://localhost/site/ 时,我得到错误 500。我只知道基本的 reg ex,并且非常有限的 mod_rewrite,所以我不能在这里看到错误。如果我删除 rewritemap 行,页面不会给出任何错误。我的服务器不支持rewritemap吗??

非常欢迎任何其他有关 .htaccess 文件的 cmets :)

感谢您的宝贵时间。

【问题讨论】:

    标签: mod-rewrite seo url-rewriting lowercase


    【解决方案1】:

    @埃斯本

    重写主机名有点棘手。您有权访问服务器错误日志吗?因为那可能会使用一些关于 500 的原因的信息。

    为了清楚起见,最好将参数括在引号中:

    RewriteMap  lc int:tolower
    RewriteCond "%{REQUEST_URI}" "[A-Z]"
    RewriteRule "(.*)"           "${lc:$1}" [R=301,L]
    

    [L] 将强制它结束对这个请求的处理,这意味着如果对 URI 有更多的工作要做,它会在重新提交请求时发生。您可能需要考虑批量修改,以便请求只经过一次修改过程:

    RewriteMap  lc int:tolower
    RewriteCond "%{REQUEST_URI}" "[A-Z]"
    RewriteRule "(.*)"           "${lc:$1}" [E=REDIRECT:TRUE]
    
    RewriteCond "%{HTTP_HOST}"   "!^www\."  [NC]
    RewriteRule "^"              "-"        [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE]
    

    下面的尝试是什么?

    RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L]
    

    效果(尽管有时髦的正则表达式)是“如果 REQUEST_URI 以 '/' 结尾,则将其剥离并重定向。”那是你要的吗?请记住,.htaccess 文件中的内容略有不同..

    还有这个:

    RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L]
    

    您似乎想说“将任何“foo/bar”更改为“index.php?worker=foo&params=bar”。如果这是正确的,它可能不会工作。由于您在 .htaccess 文件中,因此您正在匹配文件系统路径,而不是 URI。

    所以试试这个:

    RewriteMap  "lc"                 "int:tolower"
    
    RewriteCond "%{REQUEST_URI}"     "[A-Z]"
    RewriteRule "(.*)"               "${lc:$1}" [E=REDIRECT:TRUE]
    
    RewriteCond "%{HTTP_HOST}"       "!^www\."  [NC]
    RewriteRule "^"                  "-"         [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE]
    
    RewriteCond "${ENV:REDIRECT}"    "!TRUE"
    RewriteRule "^"                  "-"        [SKIP=2]
    RewriteCond "${ENV:PREFIX_WWW}"  "TRUE"
    RewriteRule "(.*)"               "http://www.${HTTP_HOST}/$1"     [R=301,L]
    RewriteRule "^"                  "-"                               [R=301,L]
    
    RewriteRule "^([^/]+)/([^/]?)$"  "index.php?worker=$1&params=$2" [PT]
    

    我不确定SKIPRewriteCondRewriteRules 混合的语句的影响,但试试上面的,看看你是否更接近。

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多