0

这个问题可能看起来很吓人。不,这很简单,但解释得很透彻。所以请继续阅读。

我需要制作一个多语言页面(英语和西班牙语),并且我想使用此段来路由每种语言:

mysite/ en /mycontroller/mymethod

这些是我在 .htaccess 中制定的规则及其描述:

# Rewrite url removing language segment and appending it as a request variable
RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]

# Remove index.php from URL
RewriteCond $1 !^(index.php|css|images|scripts|robots.txt|sitemap.xml) 
RewriteRule ^(.*)$ index.php/$1 [L]

有些事情我做的不对:

第一条规则是正确创建请求变量lang,但仍在路由 URL 而不删除语言段(en|es),这会导致错误,因为 Codeigniter 假设(所以我认为)期望一个名为“en”的控制器或“是”。我最终可以摆脱 CI 路线中的这一部分,但由于我是在 .htaccess 中进行的,因此无需再次重复。据我所知,这部分在重写后不应该再存在了。

注意:由于以下原因,我不想在这种特殊情况下使用 CI 路由:

  • 默认情况下,它们不适用于附加的请求变量,
  • 我不想在公共 URL 中使用可见的请求变量(无法在配置文件中启用它们),
  • 将请求变量作为参数段传递意味着需要在索引或其他任何请求的方法中检索它,
  • 我想在构造函数中处理这个(在其中检索 $_GET('lang') )。

以防万一,这些是在输入 index.php 时转储的 $_GET 和 $_SERVER 变量(不是全部):

示例网址:http://localhost/mysite/en/portfolio

$_GET:

Array
(
    [lang] => en
)

$_服务器:

Array
(
    [DOCUMENT_ROOT] => C:/xampp/htdocs
    [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
    [SCRIPT_FILENAME] => C:/xampp/htdocs/mysite/index.php
    [REDIRECT_QUERY_STRING] => lang=en
    [REDIRECT_URL] => /mysite/portfolio
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => lang=en
    [REQUEST_URI] => /mysite/en/portfolio
    [SCRIPT_NAME] => /mysite/index.php
    [PATH_INFO] => /portfolio
    [PATH_TRANSLATED] => C:\xampp\htdocs\portfolio
    [PHP_SELF] => /mysite/index.php/portfolio
)

没有语言段的相同 URL 可以完美运行并进入 Portfolio 控制器: http://localhost/mysite/portfolio

任何帮助都将受到欢迎。

4

2 回答 2

0

尝试更改RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]RewriteRule ^(es|en)/(.*) index.php/$2?lang=$1 [L]

于 2012-12-21T16:01:43.367 回答
0

试试这个代码一次......

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2012-12-21T14:17:15.383 回答