.htaccess重写为默认语言文件夹?

时间:2009-11-06 18:02:02

标签: apache mod-rewrite

我的网站按语言划分为多个文件夹:

/
  /en/
    index.php
    about-us.php
    faq.php
    ...

  /fr/
    index.php
    about-us.php
    faq.php
    ...

  ...
  etc.

如果有人试图输入en,我希望有一个重写规则自动重写到mydomain.com/about-us.php文件夹。

仅供参考,我还有一个删除扩展名的重写规则,所以我确实要确保mydomain.com/about-us重写为mydomain.com/en/about-us。这是我现有的重​​写规则:

# allows for extension-agnostic urls 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

那有道理吗?有人帮帮我吗?

编辑:

@Gumbo -

这是我的.htaccess文件的样子(这就是它的全部内容):

RewriteEngine On

# defaults to the english site
RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [L,R=301]

# allows for extension-agnostic urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

此文件位于我的网站的根目录中(不在语言文件夹中)。我已经重新加载了我的网络服务器,只是为了安全起见,当我尝试转到mydomain.com/about-us时仍然收到此错误消息:

Not Found

The requested URL /about-us was not found on this server.

...其中mydomain.com/en/about-us工作正常。

还有其他想法吗?

1 个答案:

答案 0 :(得分:3)

将此规则放在您的规则之前:

RewriteRule !^(fr|en)/ /en%{REQUEST_URI} [L,R=301]

或者更一般:

RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [L,R=301]