代码之家  ›  专栏  ›  技术社区  ›  zildjohn01

为什么Apache的RewriteRule揭示了本地路径?

  •  15
  • zildjohn01  · 技术社区  · 15 年前

    我正在尝试使用重写规则 .htaccess 但是Apache似乎希望输出 身体的 路径而不是 服务器 路径每当我试图输出一个相对路径。绝对路径和服务器根路径工作正常。例如:

    RewriteEngine On
    
    # this works fine, 127.0.0.1/ab redirects to 127.0.0.1/cd
    RewriteRule ^ab$ /cd [R]
    
    # this doesn't work... 127.0.0.1/wx redirects to 127.0.0.1/C:/path/to/files/yz
    RewriteRule ^wx$ yz [R]
    

    添加一个“ RewriteBase / “解决了问题,但是在每个 .htaccess接口 ,这使得更改目录结构更加困难。RewriteBase默认为当前 身体的 路径而不是当前路径 乌里 路径?

    3 回复  |  直到 15 年前
        1
  •  12
  •   mkilmanas    13 年前

    对于那些碰巧从谷歌(Google)来到这里的人(比如我),简短的清单如下:

    • 确保你有 RewriteBase / (或任何其他价值-声明是重要的)

    • 如果使用重定向( [R] , [R=30x] ,等等)-确保新的URI以 / 并包含相对于域根目录的路径

    • (如果上面没有帮助)重新启动Apache,清除浏览器的缓存(特别是如果您已经使用了 [R=301] 在某个时刻)

    这就是拯救我的一天,也许它也会拯救你的一天。

        2
  •  5
  •   FWH    15 年前

    这是因为[R]意味着服务器将重定向到新路径(因此用户的浏览器将使用新发送的uri发出新请求),而不是在内部将uri转换为本地路径。

    在第一个重写规则中,新路径中有一个斜杠,因此服务器不会尝试将其转换为本地路径,但在第二个规则中,没有斜杠,这就是为什么它会重定向到完整的本地路径。这也解释了为什么它与RewriteBase集一起工作。

    删除[R](在您的情况下,可以用[L]替换它,这样可以避免服务器在找到匹配的规则后试图匹配其他规则),或者在第二个重写规则的“yz”之前添加斜杠。

    我建议简单地用[L]替换[R]:这样,用户就看不到重写的路径,这通常是RewriteRules打算做的(主要是为了搜索引擎优化),除非您特别想将用户重定向到新的URL。

        3
  •  0
  •   Alireza    13 年前

    试试这个告诉我结果:
    #这不管用。。。127.0.0.1/wx重定向到127.0.0.1/C:/path/to/files/yz

    重写规则^wx$/yz[R]

    放在yz前面。