关于SpeedPHP URL伪静态的问题
发布于:2022-01-17 09:50:54
#1 52833
现在有一个问题,我是想将网站的一个二级目录(SpeedPHP 程序)通过.htaccess url重写的方式赋予一个二级域名
RewriteEngine onRewriteCond %{HTTP_HOST} ^dict.zp163.cn$
RewriteCond %{REQUEST_URI} !^/Dict/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /Dict/Index.php?$1
RewriteCond %{HTTP_HOST} ^dict.zp163.cn$
RewriteRule ^(/)?$ Dict/Index.php [L]
'map' => array( 'search' => 'Search@Index')
测试地址 dict.zp163.cn/Search?q=good
通过修改spFunctions.php 文件 对echo $__controller."
". $__action; 等变量的输出
ch
可见 SpeedPHP $__controller 接收到的值为dict.zp163.cn/Sear
ch?q=good 中的ch
上面的规则已经写明是将所有匹配到的信息发送至二级目录下的Index.php?$1
不知道算不算spUrlRewrite的一个小bug
还望jake耐心解答
2011-02-01 04:13:23
#2 52833
该问题解决了, 问题发生在spUrlRewrite.php的81行
$GLOBALS['G_SP']['url']['url_path_base']被自定义了,
在首页重新定义$spConfig['url']['url_path_base'] = 'Index.php';
即可解决
但现在又遇到一个伪静态规则的问题
按照上面的规则 服务器会将所有的请求都解析到Index.php 包括已存在的文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这两句貌似都不管用
2011-02-01 05:20:31
#4 jake
主要的问题,是因为整个应用程序是放到二级目录中的(我测试的使用名称是rewrite)。所以无论是URL或是实际存在的文件(图片等),都需要在地址上面加入/rewrite/这样的二级目录。
1. 下面这两句是生效的,不过访问的时候要加上
/rewrite/logo.gif这样
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
2. UrlRewrite用下面的htaccess规则可以正常使用。
RewriteCond %{HTTP_HOST} ^rewrite\.speedphp\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/rewrite/
RewriteRule ^(.*)$ /rewrite/index.php [L]
3. 用上面的规则,SP默认生成的地址,是/rewrite/search这样的地址。这也是因为程序在二级目录中。所以楼主说的,把url_path_base设置一下是很好的方法。感谢楼主的细心:handshake
整个UrlRewrite的设置是
$spConfig = array(
'launch' => array(
'router_prefilter' => array(
array('spUrlRewrite', 'setReWrite'),
),
'function_url' => array(
array("spUrlRewrite", "getReWrite"),
),
),
'url' => array(
'url_path_base' => '/index.php',
),
'ext' => array(
'spUrlRewrite' => array(
'suffix' => '',
'sep' => '-',
'map' => array(
'search' => 'search@index'
),
),
),
);
这样生成的地址就是/search了,而且也可以正常使用。
2011-02-01 10:08:59
#5 52833
感谢jake耗时达2小时的耐心解答
不过还有些小小的问题:
1. 下面这两句是生效的,不过访问的时候要加上/rewrite/logo.gif这样
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
在 rewrite的规则 中 有没有办法将上面的二级目录给重写掉呢?
直接rewrite.speedphp.com/logo.gif 就可以访问的到呢?
2011-02-01 11:31:16
#6 jake
这个也得写规则,我先去试试。
2011-02-01 11:53:32
#7 52833
感谢jake 我是用了两个.htaccess文件完成的
根目录下
RewriteCond %{HTTP_HOST} ^rewrite\.speedphp\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/rewrite/
RewriteRule ^(.*)$ /rewrite/index.php [L]
rewrite目录下
RewriteEngine On
RewriteBase /Dict
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ Index.php?$1 [L]
问题虽然解决了,但是总觉得会给服务器增加不少负担。期待jake更好的方法。
2011-02-01 12:01:20
#8 jake
不错的方法。:handshake
2011-02-01 12:38:25