|
|
ralf.hoo
发表于 2006-6-8 17:11:52
|
显示全部楼层
我在配置过程中遇到了问题,live-chat 一次,发邮件 N 次后解决。hostgator 的客服反应很快,解答问题很有耐性。下面把我遇到的问题写下来,希望对以后申请虚拟主机空间(不单只hostgator)的朋友有帮助。
我遇到的问题是关于 .htaccess 的配置。通过配置 .htaccess 可以改变 apache 服务器的一些行为。
我的目的是让 apache 把某个不以 .php 后缀的文件当成 php 文件来处理。很多网站使用这样的配置,结合 CGI 中的 PATH_INFO 来实现动态 URL 的静态化。
在主配置文件 httpd.conf 中,可以这样配置
- <FilesMatch "^filename$">
- ForceType application/x-httpd-php
- </FilesMatch>
复制代码
但是在虚拟主机环境下,不允许配置 httpd.conf。部分虚拟主机商允许配置 .htaccess,hostgator就是其中之一。
问题出现了,按照上面的配置,浏览器输入 http://yoursite.com/filename (filename 是一个正常的 php 文件)的时候,服务器会返回 500 内部错误,说明 .htaccess 配置错误。
google 了再 google 还是找不到解决方法,找到的大多是提出这个问题。在 hostgator 的客服的帮助下,找到了一个 .htaccess 配置说明文档:http://www.netmore.net/mini_htaccess.shtml 在尝试多次之后终于配成功。代码如下:
- <Files "filename">
- SetHandler application/x-httpd-php
- </Files>
复制代码
改动有二:
1,.htaccess 中不能用 <FilesMathch> </FilesMatch>,包括 <Location> </Location>, <Directory> </Directory>, ...。只能用 <Files> </Files>
2,.htaccess 中不能用 ForceType,要用 SetHandler
改完后,在浏览器输入 http://yoursite.com/filename,OK了。
这个配置的强大之处不单单是把 filename 编程 php 文件来处理,而是结合 PATH_INFO 之后的功能。现在,只要你输入任何以 http://yoursite.com/filename 开头的网站:
- http://yoursite.com/filename/asdf
- http://yoursite.com/filename/http://www.baidu.com
复制代码
apache 服务器都会始终调用 filename 。
而在 CGI 脚本中,可以通过 PATH_INFO 来获取请求的路径,上面两个连接的 PATH_INFO 值为:
- /filename/asdf
- /filename/http://www.baidu.com
复制代码
看到了吗?这个时候,路径控制权完全掌握在 CGI 脚本中,你可以把它当成任意路径,例如:
- http://yoursite.com/filename/123/456
- 在 CGI 中把它修改成:
- http://yoursite.com/filename?section=123&subsection=456
复制代码
这样就实现了动态 URL 的静态化。
[ 本帖最后由 ralf.hoo 于 2006-6-8 05:14 PM 编辑 ] |
|