【问题标题】:mod_rewrite and double slash issuemod_rewrite 和双斜杠问题
【发布时间】:2011-05-15 07:55:05
【问题描述】:

我在Apache2 中应用了以下mod_rewrite 规则以从非www 重定向到www:

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

我有两个问题:

1) 存在双斜线问题:

有什么解决办法吗?

2) 我的配置是否适合 SEO?

【问题讨论】:

    标签: apache mod-rewrite configuration


    【解决方案1】:

    实际上,由于

    ,你总是会有双斜线
    RewriteRule ^(.*)$ http://www.wxample.com/$1 [R=301,L]
    

    结合 REQUEST_URI(您正在匹配的)通常包含一个起始斜杠这一事实。你可以试试RewriteRule ^(.*)$ http://example.com$1,然后发送一个破碎的HTTP请求GET foo HTTP/1.0,看看Apache是​​否处理得当。

    【讨论】:

      【解决方案2】:

      那是因为根路径是/,并且您正在附加您在RewriteRule 中获得的任何内容(第一种情况可以正常工作,因为它符合条件,因此不会重写执行)。

      你可以试试这样的:

      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
      # for the home page
      RewriteRule ^/$ http://www.mydomain.com/ [R=301,L]
      # for the rest of pages
      RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
      

      【讨论】:

        【解决方案3】:
        RewriteRule ^\/?(.*)$ http://www.mydomain.com/$1 [R=301,L]

        【讨论】:

        • 恕我直言,与已接受的解决方案相比,应该首选此解决方案,因为从匹配中省略前导 / 比从重写中省略更干净。
        • 次要,但是RewriteRulepattern中的正斜杠不需要反斜杠转义。
        • @MrWhite 为什么不用转义呢?不是特殊字符吗?谢谢!
        • @StockBreak 正斜杠不是正则表达式中的“特殊字符”。正斜杠有时用于“分隔”正则表达式(在某些环境中),但在 Apache 配置文件中(使用 Apache 表达式时除外),空格是正则表达式(和参数)分隔符。跨度>
        • 谢谢,我以为 Apache 内部使用了/ 作为分隔符。
        【解决方案4】:

        固定为:

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

        因为$1默认包含索引路径/

        【讨论】:

        • 值得向其他读者澄清一下,这只适用于在 servervirtualhost 上下文中使用该指令的情况。当在 目录(即<Directory> 容器)或.htaccess 上下文中使用时,与RewriteRule pattern 匹配的 URL 路径不包含斜杠前缀.
        【解决方案5】:

        在你的模式中加入一个斜线应该可以解决这个问题:

        RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
        

        【讨论】:

          猜你喜欢
          • 2011-06-28
          • 2023-03-19
          • 2016-07-14
          • 1970-01-01
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          相关资源
          最近更新 更多