这个问题可能看起来令人生畏。不,这很简单,但彻底解释了。所以请继续阅读。
我需要制作一个多语言页面(英语和西班牙语),我想使用此段来路由每种语言:
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”或“es”的控制器。我最终可以在CI路线中摆脱这一段,但由于我在.htaccess中这样做,所以不需要再重复它。据我所知,重写后该段不应再存在。
注意:由于以下原因,我不想为这种特殊情况使用CI路由:
如果这有帮助,这些是在输入index.php时转储的$ _GET和$ _SERVER变量(并非全部):
示例网址:http://localhost/mysite/en/portfolio
$ _ GET:
Array
(
[lang] => en
)
$ _ SERVER:
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
欢迎任何帮助。
答案 0 :(得分:0)
尝试此代码一次.........
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
答案 1 :(得分:0)
尝试将RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]
更改为RewriteRule ^(es|en)/(.*) index.php/$2?lang=$1 [L]