我有一条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
将会正确应用。