我已经在这里待了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使用内部重定向的秘诀是什么?
答案 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中的任何尾随内容。