【问题标题】:Rewrite all urls in project with wamp and Codeigniter用 wamp 和 Codeigniter 重写项目中的所有 url
【发布时间】:2012-03-30 09:02:37
【问题描述】:

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

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

现在,在我的代码中,我有一些像 <a href="/login"></a> 这样的网址,但是当我点击时,我得到一个未找到的页面,因为它打开的是 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>

【问题讨论】:

    标签: apache codeigniter url-rewriting wamp


    【解决方案1】:

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

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

    在标签中:

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

    另外,如果我理解正确,您已经尝试将 RewriteBase /v3/ 放入您的 .htaccess 中,对吧?

    问候

    【讨论】:

    • 是的,我添加了 RewriteBase /v3/ 并取消了注释。我不知道为什么在不添加典型的 base_url() 或 site_url() 的情况下,不能仅将我所有的 url(css、图像、锚点)重写为 /v3/ 开头。
    【解决方案2】:

    问题是您的锚点设置为指向/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>
    

    【讨论】:

    • 是的,base_url() 是一个快速的解决方案,但是这个本地站点将部署在我们 Web 服务器的根目录中。所以我知道在我的本地主机中工作时必须有一些东西可以重写网址。在所有代码中输入 base_url 有点烦人。
    • 在重写index.php时添加v3怎么样,比如:RewriteRule ^(.*)$ /v3/index.php/$1 [L]
    • 是的,我也这样做了,什么也没发生 :((是的,我激活了 mod_rewrite 模块)
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我忘了说我已经这样做了,没有任何改变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2018-12-30
      • 2011-01-31
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多