【问题标题】:mod_rewrite and routing to code ignitermod_rewrite 和路由到 codeigniter
【发布时间】:2014-01-08 16:41:39
【问题描述】:

我一直使用代码点火器作为站点的子目录,并且在一台服务器上有多个 if 实例。每个实例都被视为一个单独的应用程序,但都在同一个域名下。不过,我希望启用稍微不同的 URL 结构,并求助于 mod_rewrite 来帮助我。

该页面可通过 http://localhost/test 访问,但我想重写该 URL 以显示为 http://localhost/en-US/test。

问题是我不断收到代码点火器 (CI) 404。我可以确认 mod_rewrite 已到达 CI index.php,但 CI 未能提供正确的页面。这是和示例设置:

1) Download a new instance of CI 并将其放在站点根目录的子目录中。将 CI 文件夹命名为“test”。现在应该可以在本地服务器上通过 http://localhost/test 访问它,并且您应该会看到默认的欢迎视图。

2) 在服务器的 Web 根目录中创建一个 .htaccess 文件。不要将它放在 CI“测试”目录中。向其中添加以下行。

RewriteEngine On
RewriteBase /
RewriteRule ^en-US/test/?$ test/index.php [NC,L]

根据我对 mod_rewrite 的理解,这应该允许 URL http://localhost/en-US/test 呈现位于 http://localhost/test 的内容。但它没有。我刚得到一个 404 的 CI 版本。我需要帮助找出如何解决这个问题。

【问题讨论】:

  • 你可以试试:RewriteRule ^en-US/test/?$ /test/index.php [NC,L,R]
  • 这会起作用,只是它会更改 URL。这只是一个重定向,我需要保持新 URL 不变。
  • 我只知道用于测试其他配置问题,我想知道该重定向规则是否确实对您有用?
  • 当然。它在相应的页面上解决了。
  • 好的,在下面提供了答案。

标签: php apache .htaccess codeigniter mod-rewrite


【解决方案1】:

嗯,你的问题让我安装了 CodeIgnoter 并阅读了它的路由:)

无论如何,你的DocumentRoot/.htaccess 是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^en-US/(test)/(.*)$ $1/$2 [NC,L]

然后在 /test/application/config/config.php` 中替换这一行:

$config['uri_protocol'] = 'PATH_INFO';

默认设置为:

$config['uri_protocol'] = 'AUTO';

之后,您可以打开此 URL:http://domain.comen-US/test/ 以在 /test/ 目录中加载 CI 主页。

【讨论】:

  • 成功了!谢谢。 PATH_INFO 似乎是那里的决定因素。我什至尝试了原始的 RewriteRule,它也很有效。再次感谢您的帮助。
  • 不客气,很高兴它成功了。感谢您强迫我安装 CI :)
【解决方案2】:

您应该查看routing。将此语句放在您的 config/routes.php 文件中保留路由之后。

$route['test'] = "en-US/test";

拥有 Codeigniter 后,您可以忘记 htaccess(大多数情况下)。

【讨论】:

  • 这不起作用,因为它需要在 URL 到达 CI 之前影响 URL。服务器上有几个 CI 实例。如果 CI 是服务器上唯一的东西并且它可以自己处理路由,这可能会起作用。
猜你喜欢
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2011-07-08
相关资源
最近更新 更多