zil*_*n01 15 apache .htaccess mod-rewrite
我试图在.htaccess相对路径中使用RewriteRules ,但是当我尝试输出相对路径时,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]
Run Code Online (Sandbox Code Playgroud)
添加" RewriteBase /"可以解决问题,但是将路径添加到每个路径都很繁琐.htaccess,这使得更改目录结构变得更加困难.有没有理由RewriteBase默认使用当前的物理路径而不是当前的URI路径?
mki*_*nas 12
对于那些碰巧从谷歌来到这里的人(像我一样),简短的清单:
确保你有RewriteBase /(或任何其他价值 - 声明是重要的)
如果使用重定向([R],[R=30x]等) - 请确保新URI以a开头,/并包含相对于域根的路径
(如果上面没有帮助)重新启动Apache,清除浏览器的缓存(特别是如果你曾经[R=301]在某个时候使用过)
这就是拯救我一天的东西,也许它会拯救你的.
这是因为[R]意味着服务器将重定向到新路径(因此用户的浏览器将使用新发送的uri发出新请求),而不是将URI内部转换为本地路径.
在你的第一个RewriteRule中,新路径中有一个斜杠,因此服务器不会尝试将其转换为本地路径,但在第二个规则中,没有斜杠,这就是它重定向到完整本地路径的原因.这也解释了为什么它适用于RewriteBase集.
删除[R](在你的情况下可以用[L]替换它,这可以避免服务器在找到匹配的规则后尝试匹配其他规则),或者在第二个RewriteRule中的"yz"之前添加斜杠.
我建议简单地用[L]替换[R]:这样,用户将看不到重写路径,这通常是RewriteRules打算做的(主要用于SEO目的),除非你特别想要将用户重定向到新网址.
| 归档时间: |
|
| 查看次数: |
5255 次 |
| 最近记录: |