将子文件夹指向根目录而不更改URL

时间:2019-04-16 13:55:45

标签: php .htaccess

我正在翻译我的网站,并将使用以下结构:

  • www.mywebsite.com->英文版
  • www.mywebsite.com/es-> ES版本
  • www.mywebsite.com/fr-> FR版本
  • ...

从维护的角度来看,我想对所有语言使用完全相同的PHP文件。我将只获取URL,查看URL中包含哪种语言代码,然后从数据库中加载正确的语言。这样,我不必使用基本相同的代码来维护不同的文件。

因此,理想情况下,我希望www.mywebsite.com/es加载www.mywebsite.com/index.php但不重定向到它:地址栏中的URL仍应包含/es

以相同的方式,www.mywebsite.com/es/whatever/other.php应该加载www.mywebsite.com/whatever/other.php,但URL中应包含/es

.htaccess中有可能吗?

我现在要把的只是放在/es/index.php中:

include('../index.php');

...效果很好,但是维护起来有点麻烦,因为我必须在所有语言文件夹中创建所有这些虚拟页面。

2 个答案:

答案 0 :(得分:1)

您可以在网站根.htaccess中使用此代码:

DirectoryIndex index.php
Options -MultiViews
RewriteEngine On

RewriteRule ^(es|fr)$ /$1/ [L,NC,R=301]

RewriteRule ^(?:es|fr)/$ index.php [L,NC]

RewriteRule ^(?:es|fr)/(.+)$ $1 [L,NC]

答案 1 :(得分:0)

如果在服务器上找不到任何文件或目录,则可以将所有传入的请求重写为index.php。然后从index.php上的URL中提取语言代码,并从数据库中获取正确的信息。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

这应该有效