Apache 2.2 使用 Alias 重写仅适用于 [R] 模式

Apache 2.2 使用 Alias 重写仅适用于 [R] 模式

我有一条mod_rewrite将请求传递给前端控制器的规则,但是如果没有标志,我似乎无法使其工作[R]

设置并不完全简单,我在 Web 根目录中有一个别名目录,我试图重写到该目录中。如果我忽略该目录,我可以让它重写得很好。

如果我使用:

Alias /main /some/path/
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule /main/(.*)$ /main/index.php/$1 [R]

它按预期工作,并且 index.php 接收该值作为参数,但由于它使用 [R] 标志,因此对的请求/main/some-param最终以以 结尾的 URI 结尾/main/index.php/some-param,而我的目标是使其透明。

如果没有[R],请求将导致 404,并且日志条目的内容File does not exist: /mywebroot/main看起来很奇怪。

这里使用有什么原因导致的吗Alias,或者是规则本身有错误?

答案1

导致问题的是Alias—— 重写版本被假定为实际文件的路径(绝对文件系统路径或相对于 的路径DocumentRoot)。如果您添加PT标志,Alias将会正确应用。

相关内容