【发布时间】:2015-07-09 20:36:13
【问题描述】:
我正在尝试重定向页面,将 URL 中表示为子文件夹(“en/”、“de/”...)的语言指示符转换为我可以使用的参数和。 “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 版本”),我得到:
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.php
RewriteRule ^index\.html$ /index.php?lang=de [L]
但这不是一个合适的解决方案,不是吗?
【问题讨论】:
-
这些真的都是规则吗?
error.log记录哪个路径?启用重写日志记录。 -
我看到了唯一的问题 - 在第二条规则中添加前导斜杠
RewriteRule ^index\.html$ /index.php?lang=fr [L] -
/en/index.php - 谁从
html更改了扩展名? -
RewriteRule ^(en)/(index\.html)$ index.php?lang=en [L]
-
@Eric 好的。谁返回 ^/en/ ?我认为htaccess中有更多的行
标签: php .htaccess mod-rewrite