mod_rewrite和双斜杠问题

Mar*_*ark 17 apache mod-rewrite configuration

我将以下mod_rewrite规则应用于Apache2从非www重定向到www:

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

我有两个问题:

1)有一个双斜线问题:

任何解决方法的提示?

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

Mar*_*ark 33

修正:

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

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

  • 值得其他读者澄清的是,这只适用于在 _server_ 或 _virtualhost_ 上下文中使用指令时。当在 _directory_ (即 `<Directory>` 容器)或 `.htaccess` 上下文中使用时,与 `RewriteRule` _pattern_ 匹配的 URL 路径不包含斜杠前缀。 (3认同)
  • @MrWhite 这是一个巨大的区别,它回答了我的问题。我已将所有“.htaccess”指令移至“.conf”,但没有任何效果。这是主要的“/”问题!谢谢。 (2认同)

Rah*_*hly 20

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

  • @StockBreak 正斜杠不是正则表达式中的“特殊字符”。正斜杠有时用于“分隔”正则表达式(在某些环境中),但在 Apache 配置文件中(使用 Apache 表达式时除外),_spaces_ 是正则表达式(和参数)分隔符。 (2认同)

use*_*515 6

实际上,你总是会有双斜线

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

结合REQUEST_URI(您正在匹配)通常包含起始斜杠的事实.您可以尝试的是,然后发送一个损坏的HTTP请求,看看Apache是​​否正确处理它.RewriteRule ^(.*)$ http://mydomain.com$1GET foo HTTP/1.0