我试图以语言指示符的方式重定向页面,在URL中将其表示为子文件夹(" en /"," de /&#34 ; ...),转换为我可以使用的参数。 " FR",作为网站的主要语言,没有语言子文件夹。
为了说明这一点:
www.domain/index.html
应该重定向到
www.domain/index.php?lang=fr
和
www.domain/en/index.html
应该重定向到
www.domain/index.php?lang=en
我在.htaccess文件(位于根目录中)中尝试了以下内容:
RewriteEngine On
RewriteRule ^en/index\.html$ /index.php?lang=en [L]
RewriteRule ^de/index\.html$ /index.php?lang=de [L]
RewriteRule ^index\.html$ index.php?lang=fr [L]
最后一个按预期工作,但前两个返回404.对于第二行(" de version"),我得到:
The requested URL /de/index.php was not found on this server.
Apache记录以下内容:
[Thu Jul 09 13:14:28 2015] [error] [client ::1] script '/Applications/MAMP/htdocs/testsite/de/index.php' not found or unable to stat
服务器似乎完全忽略了前两个规则,如第二行中更改目标文件名,如下所示:
RewriteRule ^de/index\.html$ /blah.php?lang=de [L]
仍会触发相同的404消息,说明缺少de / index.php而不是blah.php;
然而,将.htaccess放在名为' de'的子文件夹中的工作是什么?并从那里指向
的根文件夹中的index.phpRewriteRule ^index\.html$ /index.php?lang=de [L]
但那不是一个合适的解决方案,是吗?
答案 0 :(得分:0)
在某些情况下,在规则之前添加此行有助于:
RewriteBase /
此外,在某些服务器配置中,您需要从^/
开始,而不仅仅是^
。所以规则看起来像这样:
RewriteRule ^ / en / index.html /index.php?lang=en
这为我解决了一次。
只是提示:
EN和DE规则都可以写成单一规则:
RewriteRule ^(en|de)/index.html /index.php?lang=$1
这也可以扩展到任意数量的区域设置,只需用|
符号分隔即可。 |
基本上是OR
运营商。
我测试了这些,他们似乎做了你需要的东西:
RewriteRule ^index\.html /index.php?lang=fr [L]
/index.html
- > /index.php?lang=fr
RewriteRule ^en/index\.html /index.php?lang=en [L]
/en/index.html
- > /index.php?lang=en
RewriteRule ^de/index\.html /index.php?lang=de [L]
/de/index.html
- > /index.php?lang=de
另一个不那么有限的解决方案看起来就像这样:
RewriteRule ^([a-z]{2})/index.html /index.php?lang=$1
/xx/index.html
- > /index.php?lang=xx
这实际上需要任意两个字符并将它们设置在$ 1所在的位置。但这可能不是你真正想要的,这只是一个提示。
P.S。这是一个测试重写规则的好工具:LINK