【问题标题】:Using .htcaccess to redirect to www. AND add trailing forward slash使用 .htaccess 重定向到 www。并添加尾部正斜杠
【发布时间】:2011-07-08 10:16:34
【问题描述】:

我已经搜索了一段时间,并尝试自己调整这个文件,我几乎就在那里,但有一个案例我无法弄清楚...... 如何同时获得 www。和一个正斜杠同时

如果我输入 spectrl.com,它会重定向到 www.spectrl.com 正确 - 添加 www。
如果我输入 www.spectrl.com/ebaycalculator 它会重定向到 www.spectrl.com/ebaycalculator/ 正确 - 添加 /

但是,如果我输入 spectrl.com/ebaycalculator,当它应该转到 www.spectrl.com/ebaycalculator/ 时会出现 404 错误

这是我的 .htcaccess 文件,保存在根目录:

RewriteBase /

Options +FollowSymlinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://spectrl.com/$1/ [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

谢谢

【问题讨论】:

    标签: apache http .htaccess mod-rewrite


    【解决方案1】:

    @卡维

    试试这个:

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

    第一个RewriteCond 捕获引用%1 中的主机名(没有任何前导www.)。这个条件总是会成功的。

    第二个RewriteCond 检查尾部斜杠;如果没有找到,会触发下一个RewriteRule

    第一个RewriteRule 使用捕获的www.-less 主机名来构建包含www. 和训练/ 的重定向。

    如果请求失败,第二节将被触发,因为它确实有一个尾随/。它检查前导 www.,并执行与第一节相同的重定向(仅不附加斜杠,因为那里已经有一个)。

    至少,应该是这样工作的;我没有测试过。 :-)

    【讨论】:

    • 恐怕这行不通。尾部斜杠被添加,但 www。部分损坏,它重定向到 www./​​span>
    • 我恢复到原来的状态,现在也一样!非常奇怪的行为......
    【解决方案2】:

    在删除并重新上传 .htaccess 然后清除缓存后,使用我在问题中的原始代码,一切似乎都按预期工作。
    希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2017-09-28
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      相关资源
      最近更新 更多