使用wamp和Codeigniter重写项目中的所有URL

时间:2012-03-13 22:01:30

标签: apache codeigniter url-rewriting wamp

我的项目位于C:/wamp/www/v3

当我通过http://localhost/v3打开项目时,我得到了预期的默认控制器。

现在,在我的代码中,我有一些网址,例如<a href="/login"></a>,但是当我点击时,我会找到一个未找到的网页,因为它会打开http://localhost/login而不是http://localhost/v3/login

我已尝试使用htaccess进行虚拟主机和重写库,但我无法重定向到正确的网址。

我的htaccess位于/ v3 /:

<IfModule mod_rewrite.c>
    RewriteEngine On
    #RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

4 个答案:

答案 0 :(得分:0)

在应用程序的配置(根文件夹)/application/config.php中,您可以设置base_url变量。尝试将其设置为“http:// localhost / v3”。

答案 1 :(得分:0)

您可以尝试将一个htaccess文件放在C:/ wamp / www目录中,并在其中添加如下的重写规则(注意 - 未经测试,可能需要修改或两次):

RewriteCond %{REQUEST_URI} !^/v3/
RewriteRule  ^/(.*)$     /v3/$1  [R]

但这意味着所有不以/ v3 /开头的网址将被重写为/ v3 /开头。真正的问题是你的网址以/开头,所以浏览器正在完成它的工作,并在开头要求没有/ v3的网址。

答案 2 :(得分:0)

问题是您的锚点设置为指向/login,这意味着http://mydomain/login。起始/表示“指向webroot”。

快速执行此操作(特别是在使用模板时),是将base_url()site_url()from the URL helper class)的值传递给您的视图,并在其中添加链接,如:

<a href="<?= base_url().'/login' ?>">Login</a>

或者如果我将$data传递给base_url()作为$ data ['base_url']的模板:

<a href="{base_url}login">Login</a>

注意:base_url()site_url()包含一个尾部斜杠

效果会给你这个(假设你没有使用重写删除“index.php”):

<a href="http://localhost/v3/index.php/login">Login</a>

或者如果删除,它将返回:

<a href="http://localhost/v3/login">Login</a>

答案 3 :(得分:0)

我习惯使用site_url('link / to');在我的网站上的任何锚点上,当我必须将它迁移到另一个服务器/文件夹时,它节省了我很多时间。

如果您不想这样做,可以使用basetag为所有链接添加基本网址。

在标签中:

<base href="<?php echo site_url('/'); ?>" />

另外,如果我理解正确,你已经尝试将RewriteBase / v3 /放在.htaccess中了,对吗?

此致