内部重定向后PATH_INFO是否停止工作?

时间:2012-03-09 01:55:59

标签: php mod-rewrite fastcgi

我已经在这里待了45分钟而没有运气。我发现了类似的问题,但没有一个能完全解决我的情况/问题。

我正在尝试重写,做两件事:1)制作干净的URL(删除index.php)2)隐藏一个目录(我的应用程序在web_root / dir,但我希望它出现在domain.com/ )3)保留$ _SERVER('PATH_INFO')不变

所以,例如。我想要:

www.mydomain.com/some/path

在内部重写为:

www.mydomain.com/dir/index.php/some/path

这是我到目前为止所做的:

RewriteBase   /dir/
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/dir.*$
# if I change the [L] to an [R], it all works
# but it obviously "dirties" my desired clean URL
RewriteRule ^(.*)$ /dir/index.php/$1 [L]

# not sure why I need this
RewriteRule ^/?$ /dir/

我应该:我的机构有一个代理人,但我认为它不会引起问题。

使用PHP 5.3和FastCGI

保持PATH_INFO使用内部重定向的秘诀是什么?

1 个答案:

答案 0 :(得分:0)

嗯!尾随路径的东西。

所以这个路径信息在重写中丢失了吗?

您是否尝试过www.mydomain.com/some/path - > www.mydomain.com/dir/index.php/some/path不是在每个目录上下文中重写,而是在服务器的URL处理中更早,比如VirtualHost?

我认为在URL上执行它不会丢失路径信息,因为当时不知道哪个部分是物理路径而哪个部分是尾随垃圾。不实用的URL映射到文件。如果你产生了

哎呀,一个简单的Alias怎么样?别名通常用于将抽象URL位置映射到应用程序的文件系统中的具体位置。我有一大堆他们;这是一个:

Alias /cgit/txr /cgit/cgit.cgi/txr

当人们访问www.kylheku.com/cgit/txr时,它会在内部重定向到www.kylheku.com/cgit/cgit.cgi/txr。该URL也可以使用,但前者更好,因为它没有三次重复字符串cgi

毋庸置疑,别名不会丢失URL中的任何尾随内容。