讨论:谁实现过Apache下的URL重写技术?

jxyuhua 2003-12-16 10:02:36
比如可以将:
http://www.chedong.com/phpMan.php?mode=man¶meter=ls
变成:
http://www.chedong.com/phpMan.php/man/ls

这种技术在Apache下的配置有谁真正的实现过?欢迎大家讨论一下。


具体文章参考:
http://www.chedong.com/tech/google_url.html

Apache模块 mod_rewrite
http://i18n.linux.net.cn/others/ApacheManual/mod/mod_rewrite.html
...全文
81 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
nth 2003-12-23
  • 打赏
  • 举报
回复
我不喜欢轻易的去改变默认apache的设置, 因为我觉得这样不利于我的程序移植。 我更愿意用重定向的技术来实现这个需求。
xuzuning 2003-12-23
  • 打赏
  • 举报
回复
我的是apache1.3.24,取默认设置
至于apache2应如何设置,在你提供的文档中已经说的很清楚了
jxyuhua 2003-12-22
  • 打赏
  • 举报
回复
是的,apache2
xuzuning 2003-12-20
  • 打赏
  • 举报
回复
"出错提示说找不到网页"——你是用apache做web服务器的吗?
xuzuning 2003-12-19
  • 打赏
  • 举报
回复
http://www.chedong.com/phpMan.php/man/ls

phpMan.php为前述代码,则会显示
Array (
[0] => man
[1] => ls
)

你不测试一下吗?
jxyuhua 2003-12-19
  • 打赏
  • 举报
回复
老大,我试了:在本地建一文件demo.php,内容同上,
然后在浏览器中:
http://localhost/websamples/demo.php/man/ls
出错,提示说找不到网页
然后我又这样试:
http://localhost/websamples/demo.php?mode=man¶meter=ls
运行结果如下:
Array ( [0] => websamples [1] => demo.php )
========================================================
是我的方法不对吗?
xuzuning 2003-12-18
  • 打赏
  • 举报
回复
很简单,只是自行解析参数
无须对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); // 查看得到的参数数组。注意由于传递的参数没有变量名信息,你需要仔细的按位置确定参数的含义
?>
mwjx 2003-12-18
  • 打赏
  • 举报
回复
mark
jxyuhua 2003-12-18
  • 打赏
  • 举报
回复
这样能达到这种效果吗?

http://www.chedong.com/phpMan.php?mode=man¶meter=ls
变成:
http://www.chedong.com/phpMan.php/man/ls
ashchen 2003-12-17
  • 打赏
  • 举报
回复
ini_set()不就可以动php.ini了吗?
活靶子哥哥 2003-12-17
  • 打赏
  • 举报
回复
如何在虚拟主机实现
我的意思是通过编程实现 虚拟主机用户那来的权利去东php.ini、??
Shawn和月 2003-12-17
  • 打赏
  • 举报
回复
得把好多 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/
141242 2003-12-16
  • 打赏
  • 举报
回复
实现过,但我个人认为极度影响速度,后来我就取消这样的重写技术了。
活靶子哥哥 2003-12-16
  • 打赏
  • 举报
回复
想知道踢下
kurt1983 2003-12-16
  • 打赏
  • 举报
回复
看晕了
unijune 2003-12-16
  • 打赏
  • 举报
回复
sports98 发表于 2003-12-5 16:40 PHP ←返回版面 [快速返回]

今日与同事在闲聊,在传递参数上,他和我说又个论坛使用了

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];
}
}
}
/***************/


转贴来了。
unijune 2003-12-16
  • 打赏
  • 举报
回复
在dev看见过。唠叨应该知道。用PHP写的,好象没用APACHE。
liyujie2000 2003-12-16
  • 打赏
  • 举报
回复
是 apache 里面配置 RewriteRule 的

你自己给出的连接
http://i18n.linux.net.cn/others/ApacheManual/mod/mod_rewrite.html

中,介绍的很详细
jxyuhua 2003-12-16
  • 打赏
  • 举报
回复
好象应该是在服务器(APACHE)上设置配置文件,没人用过吗?
gaofaq 2003-12-16
  • 打赏
  • 举报
回复
问一下这个是干啥使的?

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧