用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7005|回复: 6
收起左侧

[HELP] 伪静态不起伤作用

[复制链接]
发表于 2012-9-11 17:37:24 | 显示全部楼层 |阅读模式
我用htaccess做伪静态,不用框架的是没有问题的
htaccess示例文件如下
RewriteEngine on
RewriteRule ^(\w+)/(\d)\.html$ index.php?name=$1&age=$2 [L]


但是改用框架如zend framework 或codeigniter等单一入口的框架,rewrite则必须必须使用强制[url=]重定向[/url]

RewriteEngine on
RewriteCond %{HTTP_HOST} testci.com [NC]

RewriteRule ^$ /test/test/ [L]        #不能重定向
RewriteRule ^$ /test/test/ [L,R]     #加上强制重定向,可能跳转,但浏览器的URL也会变成 testci.com/test/test

浏览器的地址变了,也就没法实现伪静态了。

请问如向在这种框架下用rewrite实现伪静态,谢谢各位!

我来回答


发表于 2012-9-12 00:24:39 | 显示全部楼层
你都说ci是单入口了。
你看下ci的routers 的手册部分。

一般做法都是 将入口文件 如index.php 配置掉。
如:默认路径 xxx.com/index.php/controller/function/segment/...
配置成:xxx.com/controller/function/segment/...
即可


另外美化路径等,一般都是用ci的路由机制自己配的。如此省去了大量使用rewriter
详见 http://codeigniter.org.cn/user_guide/general/routing.html

ci默认是使用pathinfo 获取 uri
 楼主| 发表于 2012-9-12 09:46:44 | 显示全部楼层
CI的路由是没有问题的,我现在的目的就是不使用框架本身的路由,而采用apache的rewrite不实现伪静态
RewriteEngine on
RewriteRule ^(\\w+)/(\\d)\\.html$ index.php?name=$1&age=$2 [L]
类似于上面的代码就不起作用,必须加上强制重定向,加了后伪静态就没有用了,也就是说url的地址变了

就是想解决这个问题


发表于 2012-9-12 09:54:50 | 显示全部楼层
mark一下
发表于 2012-9-16 01:42:25 | 显示全部楼层
本帖最后由 loveinlove 于 2012-9-16 01:56 编辑

好几天没来了。

如果是要借助rewrite 来实现全站伪静态,
HTML复制代码
 index.php?name=$1&age=$2 [L]
复制代码

并且要实现类似的你这样的一个重定向路径的话,貌似就不能这么用了。

首先要更改config文件,
PHP复制代码
$config['enable_query_strings'] = TRUE;
复制代码

其他几个触发配置不更改的情况下 你的默认路径为
HTML复制代码
abc.com?c=controller&m=function&d=anything
复制代码


如此再配置你的rewrite规则。

如:
PHP复制代码
 
 
 
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(\w+)/(\d)\.html$ index.php?c=$1&m=$2
 
复制代码



我未测试。请甄别。


发表于 2012-9-16 04:33:25 | 显示全部楼层
本帖最后由 Lory 于 2012-9-16 04:35 编辑

修改 /application/config/routes.php 文件即可,在最后加一行自己的路由方法:
PHP复制代码
 
$route['([a-zA-Z0-9]+)/(\d+)\.html$'] = "class/function/?name=$1&page=$2";
 
复制代码

后面可以改成你想要的结果
我有个网站是把 domain.com/product/12345.html -> domain.com/product/show/12345
也是这样做的
PHP复制代码
 
$route['product/(\d+)\.html$'] = "product/show/$1";
 
复制代码
发表于 2012-9-16 12:46:43 | 显示全部楼层
Lory 发表于 2012-9-16 04:33
修改 /application/config/routes.php 文件即可,在最后加一行自己的路由方法:

后面可以改成你想要的结果 ...

他不想借助路由

本版积分规则