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

Apache 使用wamp和Codeigniter重写项目中的所有URL,apache,codeigniter,url-rewriting,wamp,Apache,Codeigniter,Url Rewriting,Wamp,我的项目在C:/wamp/www/v3 当我通过http://localhost/v3我得到了预期的默认控制器 现在,在我的代码中有一些URL,如,但当我单击时,会得到一个找不到的页面,因为它打开了http://localhost/login而不是http://localhost/v3/login 我已经用htaccess尝试了virtualhosts和rewritebase,但无法重定向到正确的url 我的htaccess位于/v3/内: <IfModule mod_rewrite.c&

我的项目在
C:/wamp/www/v3

当我通过
http://localhost/v3
我得到了预期的默认控制器

现在,在我的代码中有一些URL,如
,但当我单击时,会得到一个找不到的页面,因为它打开了
http://localhost/login
而不是
http://localhost/v3/login

我已经用htaccess尝试了virtualhosts和rewritebase,但无法重定向到正确的url

我的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>

重新启动发动机
#重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L]
ErrorDocument 404/index.php

在应用程序(根文件夹)/application/config.php的配置中,有一个可以设置的基本url变量。尝试将其设置为'http://localhost/v3“。

您可以尝试在C:/wamp/www目录中放置一个htaccess文件,其中包含这样的重写规则(注意-未测试,可能需要一两次润色):


但这意味着所有不以/v3/开头的URL都将被重写为以/v3/开头。真正的问题是您的url以/开头,因此浏览器正在执行其工作,并要求在开头没有/v3的url。

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

一种快速的方法(尤其是在使用模板时)是将
base_url()
site_url()
()的值传递给您的视图,并预先添加链接,如下所示:

<a href="<?= base_url().'/login' ?>">Login</a>
注意:
base\u url()
site\u url()
包含尾部斜杠

这种效果会给您带来这样的效果(假设您没有使用“重写”删除“index.php”):


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

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

我习惯于使用站点url(“链接/到”);在我的站点上的任何锚上,当我必须将其迁移到另一个服务器/文件夹时,它为我节省了很多时间

如果您不想这样做,您可以使用basetag为所有链接设置一个基本url

在标签中:

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

我忘了提到我已经这么做了,没有任何改变。是的,base_url()是一个快速的解决方案,但是这个本地站点将部署在web服务器的根目录下。所以我知道在我的本地主机上工作时,必须重写URL。在所有代码中键入base_url有点烦人。在为index.php重写时添加
v3
怎么样,比如:
RewriteRule^(.*)$/v3/index.php/$1[L]
是的,我也这么做了,什么也没有发生:((是的,我激活了mod_rewrite模块)是的,我添加了RewriteBase/v3/并取消了它的注释。我不知道为什么不可能在不添加典型的base_url()或site_url()的情况下,将我所有的url(css、图像、锚定)重写为在开始时具有/v3/。
<a href="http://localhost/v3/index.php/login">Login</a>
<a href="http://localhost/v3/login">Login</a>
<base href="<?php echo site_url('/'); ?>" />