伪静态不起伤作用
我用htaccess做伪静态,不用框架的是没有问题的
htaccess示例文件如下
RewriteEngine on
RewriteRule ^(\w+)/(\d)\.html$ index.php?name=$1&age=$2
但是改用框架如zend framework 或codeigniter等单一入口的框架,rewrite则必须必须使用强制重定向
RewriteEngine on
RewriteCond %{HTTP_HOST} testci.com
RewriteRule ^$ /test/test/ #不能重定向
RewriteRule ^$ /test/test/ #加上强制重定向,可能跳转,但浏览器的URL也会变成 testci.com/test/test
浏览器的地址变了,也就没法实现伪静态了。
请问如向在这种框架下用rewrite实现伪静态,谢谢各位!
我来回答
你都说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 CI的路由是没有问题的,我现在的目的就是不使用框架本身的路由,而采用apache的rewrite不实现伪静态
RewriteEngine on
RewriteRule ^(\\w+)/(\\d)\\.html$ index.php?name=$1&age=$2
类似于上面的代码就不起作用,必须加上强制重定向,加了后伪静态就没有用了,也就是说url的地址变了
就是想解决这个问题
mark一下 本帖最后由 loveinlove 于 2012-9-16 01:56 编辑
好几天没来了。
如果是要借助rewrite 来实现全站伪静态,
index.php?name=$1&age=$2
并且要实现类似的你这样的一个重定向路径的话,貌似就不能这么用了。
首先要更改config文件,
$config['enable_query_strings'] = TRUE;
其他几个触发配置不更改的情况下 你的默认路径为
abc.com?c=controller&m=function&d=anything
如此再配置你的rewrite规则。
如:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(\w+)/(\d)\.html$ index.php?c=$1&m=$2
我未测试。请甄别。
本帖最后由 Lory 于 2012-9-16 04:35 编辑
修改 /application/config/routes.php 文件即可,在最后加一行自己的路由方法:
$route['(+)/(\d+)\.html$'] = "class/function/?name=$1&page=$2";
后面可以改成你想要的结果
我有个网站是把 domain.com/product/12345.html -> domain.com/product/show/12345
也是这样做的
$route['product/(\d+)\.html$'] = "product/show/$1";
Lory 发表于 2012-9-16 04:33 static/image/common/back.gif
修改 /application/config/routes.php 文件即可,在最后加一行自己的路由方法:
后面可以改成你想要的结果 ...
他不想借助路由
页:
[1]