关于apache服务器mod_rewrite配置

Dreamshield 发布于 2015/03/06 01:14
阅读 829
收藏 0
我的目的是在地址栏输入的url:
http://localhost/project/ShortURL/index.php/149Ui3
自动重写为
http://localhost/project/ShortURL/index.php?controller=jump&method=jemp&code=149Ui3

apache中添加配置如下(apache2.conf):

1.在/var/www/project/ShortURL目录下建立一个.htaccss文件内容如下:

# Turn on rewrite engine
Options +FollowSymlinks
RewriteEngine on
# More rules below
RewriteRule ^index.php/(.*)$ index.php?controller=jump&method=jump&code=$1 [QSA]
2.在apach2.conf中做了如下配置:

<Directory /var/www/project/ShortURL>
    Options FollowSymLinks
    AllowOverride ALL
    Require all granted
</Directory>



现在问题是每次输入http://localhost/project/ShortURL/index.php/149Ui3都会显示没有css样式控制的http://localhost/project/ShortURL/index.php内容(地址栏还是http://localhost/project/ShortURL/index.php/149Ui3),不能跳转到http://localhost/project/ShortURL/index.php?controller=jump&method=jemp&code=149Ui3这个地址

加载中
0
狂飙的小蜗牛
狂飙的小蜗牛
RewriteRule ^(.*)$ http://xxx.xxx.x$1 [L,R=301]
0
Feng_Yu
Feng_Yu
Rewrite本来就是不跳转地址栏的。除非显示指定[R]标记。跳转地址栏使用指令Redirect
0
cisiqo
cisiqo
把 RewriteRule ^index.php ....  这个 ^  去掉就好了。还要把后面的指定标记改为[R=301]
0
Dreamshield
Dreamshield

引用来自“Feng_Yu”的评论

Rewrite本来就是不跳转地址栏的。除非显示指定[R]标记。跳转地址栏使用指令Redirect
嗯嗯,确实需要指定[R]标记
0
Dreamshield
Dreamshield

引用来自“nidongwo-”的评论

把 RewriteRule ^index.php ....  这个 ^  去掉就好了。还要把后面的指定标记改为[R=301]
测试了前面^这个没有影响.但是现在跳转后把根目录给带上了.我重写了RewriteBase还是不行.htaccess文件配置如下:
# Turn on rewrite engine
#Options +FollowSymlinks
RewriteEngine on
# More rules below                                                                                                                        
RewriteBase /project/ShortURL/
RewriteRule ^index.php/(.*)$ index.php?controller=jump&method=jump&code=$1 [L,R=301]



现在跳转后的地址变成了:http://localhost/var/www/project/ShortURL/index.php?controller=jump&method=jump&code=149Ui3.把根目录给带上了,尽管我设置了RewriteBase也没起作用
0
Dreamshield
Dreamshield

引用来自“狂飙的小蜗牛”的评论

RewriteRule ^(.*)$ http://xxx.xxx.x$1 [L,R=301]

这个方法不行,如果是动态转静态可以.比如我这样写:

RewriteRule (.*)$ http://localhost/project/ShortURL/index.php?controller=jump&method=jump&code=$1 [L,R=301]



这样的话所有链接都会变成类似的这样:http://localhost/project/ShortURL/index.php?controller=jump&method=jump&code=index.php

狂飙的小蜗牛
狂飙的小蜗牛
删除 RewriteBase 指令
0
Dreamshield
Dreamshield

引用来自“狂飙的小蜗牛”的评论

RewriteRule ^(.*)$ http://xxx.xxx.x$1 [L,R=301]

引用来自“Dreamshield”的评论

这个方法不行,如果是动态转静态可以.比如我这样写:

RewriteRule (.*)$ http://localhost/project/ShortURL/index.php?controller=jump&method=jump&code=$1 [L,R=301]



这样的话所有链接都会变成类似的这样:http://localhost/project/ShortURL/index.php?controller=jump&method=jump&code=index.php

不行的我试了,结果还是这样的:http://localhost/var/www/project/ShortURL/index.php?controller=jump&method=jump&code=149Ui3,多了/var/www
0
Feng_Yu
Feng_Yu

你还是好好看看apache的mod_rewrite文档吧,专门有列表列出规则列表


0
Dreamshield
Dreamshield

引用来自“Feng_Yu”的评论

你还是好好看看apache的mod_rewrite文档吧,专门有列表列出规则列表


嗯嗯
0
Dreamshield
Dreamshield

问题解决了,总结一下:

问题描述

我的目的是在地址栏输入的url:
http://localhost/project/ShortURL/index.php/149Ui3
自动重写为
http://localhost/project/ShortURL/index.php?controller=jump&method=jump&code=149Ui3

解决方案

1在apach2.conf中做如下配置:

<Directory /var/www/project/ShortURL>
    Options FollowSymLinks
    AllowOverride ALL
    Require all granted
</Directory>
2.在/var/www/project/ShortURL目录下建立一个.htaccss文件内容如下:
# Turn on rewrite engine                                                                         
RewriteEngine on
# More rules below
RewriteBase /
RewriteRule ^index.php/(.*)$ http://localhost/project/ShortURL/index.php?controller=jump&method=j    ump&code=$1 [L,R=301]

写在最后

感谢疯狂的蜗牛提供的思路.一点启发,没事多看文档吧,还有一点,浏览器缓存太坑爹了,要不是它早就没这么麻烦了.


返回顶部
顶部