关于urlrewrite功能的不成熟建议

#1 azwl

我试图使用urlrewrite功能时发现在我的网站无法使用。在网站中我用了很多js写的ajax请求,估计是这个原因引起的。

也看到有朋友建议增加ajax请求区别。

我想:是不是只在用get请求的时候才使用urlrewrite功能?

我对http请求技术一无所知,只是想当然的提出以上建议,不知可行否?

2010-08-05 22:32:45

#2 jake

没有这样的问题,spUrlRewrite无法使用的话,有可能是你的服务器环境支持问题,或者JS失败是因为路径问题。spUrlRewrite和ajax是不相关的东西。

而且spUrlRewrite对ajax的支持也很好,不但可以伪静态生成网址,而且同时也支持index.php?c=main这种请求模式,甚至还支持 http://www.example.com/main_index.html?arg=value&has=ajax的请求模式。

比如说在jQuery中,可以通过$.get('main_index.html',{arg:value,has:ajax});的方式来请求,同时也可以$.get('index.php', {c:main, a:index});的请求模式等等。

那个什么ajax请求区别,指的是一个函数,这个函数可以接收jQuery等框架发送的自定义头部,来判断请求是否ajax框架发起的,这个和Rewrite的路由系统是两码事,ajax请求判断函数是给用户用的,不是系统内部用的。

2010-08-05 23:03:17

#3 jake

另外补充一点,urlrewrite本身就只是针对get请求字段进行分析的。

因为如果服务器环境能够支持urlrewrite的情况下,所有的post请求都会发送到入口文件index.php处理,所以spUrlRewrite没有也不需要对post进行任何的处理。
PS:服务器环境方面,我个人最近一直在研究IIS中的PHP里面的URLREWRITE,很快会将能够成功在IIS+PHP平台中支持URLREWRITE的方法写给各位的。

2010-08-05 23:14:00

#4 azwl

谢谢你的答复,我说的无法使用,是指有的是好的有的不能用。先说一下我的配置:

vm+ubuntu+lampp

我通过反复测试后发现,如果有网页中有jquery的load请求,加载的内容会变成index.php(即首页)的内容而不是load请求的内容。但jquery的post和get请求都没有问题

2010-08-06 11:41:02

#5 jake

服务器环境支持urlrewrite与否并不是看你用什么系统,而是看你怎么设置,就算是win+iis+php只要设置正确也是可以使用rewrite。

另外关于jQuery的load,在手册内有这样一句“load 默认使用 GET 方式”,前面也说了,urlrewrite可以支持index.php?c=main&a=index的get请求模式。
GET请求是直接指向文件的,所以get到index.php和get到index.php?c=main&a=index是相同的道理,而且这个道理你可以用个表单GET提交就明白,这是HTML本身的规定。

所以jQuery才会在load的第二个参数内让开发者设置传送的参数,以便开发者可以发送c=main&a=index的参数。$("mydiv").load('index.php',{c:main, a:index, arg:val},function(){});这样的请求就可以做到访问index.php?c=main&a=index。

当然,如果用$("mydiv").load('index.php?c=main&a=index',function(){});那就是错误的。这不是UrlRewrite的问题,而是HTML本身就不能这样GET提交的限制。

2010-08-06 12:45:33

#6 azwl

很奇怪了,

$("kq_update").load("index.php?c=kaoqin&a=updateskjl"); 这样是OK的,

而$("kq_update").load("index.php",{c:"kaoqin",a:"updateskjl"}); 得到的却是主页的内容

按你说的前面那句应该有问题啊

2010-08-06 14:32:06

#7 jake

那对不起了,load我只是直接用伪静态地址和传参试过而已。

不过还是那句,urlrewrite是不会影响ajax请求。

另外下面提供了判断ajax的函数,使用于jQuery框架,你可以拿来判断是否ajax请求

function isAjax(){
        return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}

2010-08-06 14:47:22

#8 azwl

回复 7 jake

按jquery的说明

$("mydiv").load('index.php?c=main&a=index',function(){});
是get请求

而   
$("mydiv").load('index.php',{c:main, a:index, arg:val},function(){});
是post请求

现在get请求时OK的。但post请求有问题?

从post请求忽略{}中参数返回index.php内容看,问题出在哪里呢?

2010-08-06 17:39:43

#9 jake

昨天试了一下,$("mydiv").load('index.php',{c:main, a:index, arg:val},function(){});也是可以的,至少在我目前的项目里面,就是用此语句来获取用户的一些收藏信息的。

2010-08-07 09:11:25