讨论:谁实现过Apache下的URL重写技术? 在dev看见过。唠叨应该知道。用PHP写的,好象没用APACHE。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sports98 发表于 2003-12-5 16:40 PHP ←返回版面 [快速返回] 今日与同事在闲聊,在传递参数上,他和我说又个论坛使用了xxxx.php/1000/20000的传递方式进行了传递,于是就想了想最终写了这个代码----------------------------------------------------(由于考虑到有的时候并不能很完善的兼容过来,因此代码兼容了两种传值方式.)用以上所说的方法有个缺点:图片与联接必须使用绝对路径...................以下是代码--------------------------------------------------------------------------------/******转换代码*********///不包含?设置的参标记 eg. http://localhost/index.php/page=2/ccc=3if(!ereg("\\?",$_SERVER[REQUEST_URI]) && ereg("/",$_SERVER[REQUEST_URI])){//下面将数据解析入GET数组 $newgetarray=ereg_replace("$_SERVER[SCRIPT_NAME]/","",$_SERVER[REQUEST_URI]);$newgetarray=ereg_replace("/","&",$newgetarray);parse_str($newgetarray,$_GET);//不包含‘=’号的参数传递方式 eg. http://localhost/index.php/1/2if(!ereg("=",$_SERVER[REQUEST_URI])){$keys=array_keys($_GET);//本页内接受的参数排列顺序$arraylist=array("forumid","threadid");for($tempa=0;$tempa<count($keys);$tempa++){$_GET[$arraylist][$tempa]]=$keys[$tempa];}}}/***************/ 转贴来了。 好象应该是在服务器(APACHE)上设置配置文件,没人用过吗? 是 apache 里面配置 RewriteRule 的你自己给出的连接http://i18n.linux.net.cn/others/ApacheManual/mod/mod_rewrite.html中,介绍的很详细 得把好多 LoadModule 前的 # 去掉,比如:rewrite_module、proxy_module 等,记不清了,总之出什么错就去哪个就成了,参考英文文档中哪个命令对应哪个 module。以下是把 http://localhost/iis/ 和 http://localhost/tom/ 转到相应端口的例子:(但如果没有最后的斜线是不行的,我不知道怎么解决。现在在用 IIS,它可以完美的转换)ProxyPass /iis/ http://127.0.0.1:80/ProxyPassReverse /iis/ http://127.0.0.1:80/ProxyPass /tom/ http://127.0.0.1:8080/ProxyPassReverse /tom/ http://127.0.0.1:8080/ 如何在虚拟主机实现我的意思是通过编程实现 虚拟主机用户那来的权利去东php.ini、?? ini_set()不就可以动php.ini了吗? 很简单,只是自行解析参数无须对apache服务器进行设置,你或许并无设置的权限。<?php/* 此方法仅用于apache服务器 */if(isset($_SERVER[PATH_INFO])) //若PATH_INFO可用,注意aoache2默认不可用 $query_string = $_SERVER[PATH_INFO];else { $query_string = str_replace($_SERVER[SCRIPT_NAME],"",$_SERVER[PHP_SELF]); //或 $query_string = str_replace($_SERVER[SCRIPT_NAME],"",$_SERVER[REQUEST_URI]);}if(empty($query_string)) echo "没有参数";else { echo "得到的参数串 $query_string<br>"; $args = split("/",substr($query_string,1)); //分裂成数组 print_r($args); // 查看得到的参数数组。注意由于传递的参数没有变量名信息,你需要仔细的按位置确定参数的含义?> 这样能达到这种效果吗?http://www.chedong.com/phpMan.php?mode=man¶meter=ls变成:http://www.chedong.com/phpMan.php/man/ls http://www.chedong.com/phpMan.php/man/lsphpMan.php为前述代码,则会显示Array ( [0] => man [1] => ls)你不测试一下吗? 老大,我试了:在本地建一文件demo.php,内容同上,然后在浏览器中:http://localhost/websamples/demo.php/man/ls出错,提示说找不到网页然后我又这样试:http://localhost/websamples/demo.php?mode=man¶meter=ls运行结果如下:Array ( [0] => websamples [1] => demo.php ) ========================================================是我的方法不对吗? "出错提示说找不到网页"——你是用apache做web服务器的吗? 我的是apache1.3.24,取默认设置至于apache2应如何设置,在你提供的文档中已经说的很清楚了 我不喜欢轻易的去改变默认apache的设置, 因为我觉得这样不利于我的程序移植。 我更愿意用重定向的技术来实现这个需求。 我的zend studio打不开 怎么弄。 请大家推荐免费的php +zend空间 怎么样取得图片值. 急救!PHP静态生成问题! 关于PHP后台运行程序的终极讨论 我用的是xmapp套装,mysql数据库中的数据无法显示,全部是????问号 给参数编码怎么 讨教对于登录后才能看到的信息,如何抓取? utf-8 如何转换成gb2312 求教:主页logon的问题 一个简单的问题 chr(39)是什么意思?
今日与同事在闲聊,在传递参数上,他和我说又个论坛使用了xxxx.php/1000/20000
的传递方式进行了传递,于是就想了想最终写了这个代码
----------------------------------------------------
(由于考虑到有的时候并不能很完善的兼容过来,因此代码兼容了两种传值方式.)用以上所说的方法有个缺点:图片与联接必须使用绝对路径...................
以下是代码--------------------------------------------------------------------------------
/******转换代码*********/
//不包含?设置的参标记 eg. http://localhost/index.php/page=2/ccc=3
if(!ereg("\\?",$_SERVER[REQUEST_URI]) && ereg("/",$_SERVER[REQUEST_URI])){
//下面将数据解析入GET数组
$newgetarray=ereg_replace("$_SERVER[SCRIPT_NAME]/","",$_SERVER[REQUEST_URI]);
$newgetarray=ereg_replace("/","&",$newgetarray);
parse_str($newgetarray,$_GET);
//不包含‘=’号的参数传递方式 eg. http://localhost/index.php/1/2
if(!ereg("=",$_SERVER[REQUEST_URI])){
$keys=array_keys($_GET);
//本页内接受的参数排列顺序
$arraylist=array("forumid","threadid");
for($tempa=0;$tempa<count($keys);$tempa++){
$_GET[$arraylist][$tempa]]=$keys[$tempa];
}
}
}
/***************/
转贴来了。
http://i18n.linux.net.cn/others/ApacheManual/mod/mod_rewrite.html中,介绍的很详细
以下是把 http://localhost/iis/ 和 http://localhost/tom/ 转到相应端口的例子:
(但如果没有最后的斜线是不行的,我不知道怎么解决。现在在用 IIS,它可以完美的转换)ProxyPass /iis/ http://127.0.0.1:80/
ProxyPassReverse /iis/ http://127.0.0.1:80/
ProxyPass /tom/ http://127.0.0.1:8080/
ProxyPassReverse /tom/ http://127.0.0.1:8080/
我的意思是通过编程实现 虚拟主机用户那来的权利去东php.ini、??
无须对apache服务器进行设置,你或许并无设置的权限。<?php
/* 此方法仅用于apache服务器 */
if(isset($_SERVER[PATH_INFO])) //若PATH_INFO可用,注意aoache2默认不可用
$query_string = $_SERVER[PATH_INFO];
else {
$query_string = str_replace($_SERVER[SCRIPT_NAME],"",$_SERVER[PHP_SELF]);
//或
$query_string = str_replace($_SERVER[SCRIPT_NAME],"",$_SERVER[REQUEST_URI]);
}
if(empty($query_string))
echo "没有参数";
else {
echo "得到的参数串 $query_string<br>";
$args = split("/",substr($query_string,1)); //分裂成数组
print_r($args); // 查看得到的参数数组。注意由于传递的参数没有变量名信息,你需要仔细的按位置确定参数的含义
?>
变成:
http://www.chedong.com/phpMan.php/man/ls
Array (
[0] => man
[1] => ls
)你不测试一下吗?
然后在浏览器中:
http://localhost/websamples/demo.php/man/ls
出错,提示说找不到网页
然后我又这样试:
http://localhost/websamples/demo.php?mode=man¶meter=ls
运行结果如下:
Array ( [0] => websamples [1] => demo.php )
========================================================
是我的方法不对吗?
至于apache2应如何设置,在你提供的文档中已经说的很清楚了