【问题标题】:.htaccess - One language in the root folder, and other in subdirectories.htaccess - 根文件夹中的一种语言,子目录中的其他语言
【发布时间】:2019-04-03 18:20:04
【问题描述】:

我正在尝试创建一个具有 2 种或更多语言的网站,该网站会根据带有子文件夹的 URL 进行更改。我对.htaccess 文件没有太多经验。

这是我在root 文件夹中的.htaccess 文件中使用的代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

#Multi lang version
RewriteCond %{REQUEST_FILENAME} -s  [OR]
RewriteCond %{REQUEST_FILENAME} -l  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^(en) index.php  [L,NC]
RewriteRule ^(en)/(.*)$ $2.php  [L,NC]
RewriteRule ^([^.]+)$ $1.php  [L,NC]

ErrorDocument 404 /error.php

这就是我想要做的:

  1. sitename.com/ 目标root/index.php
  2. sitename.com/en目标root/index.php
  3. sitename.com/en/目标root/index.php
  4. sitename.com/pagename目标root/pagename.php
  5. sitename.com/pagename/目标root/pagename.php
  6. sitename.com/en/pagename 目标root/pagename.php
  7. sitename.com/en/pagename/目标root/pagename.php
  8. sitename.com/404目标root/error.php
  9. sitename.com/404/目标root/error.php
  10. sitename.com/en/404目标root/error.php
  11. sitename.com/en/404/目标root/error.php

我尝试了this answerthis,但它不起作用。

如果转到sitename.com/en,一切正常。它加载index.php 文件。 但是当我转到 sitename.com/en/ 时,我会转到 404 页面。在sitename.com/en/pagename/ 上也是如此。 当我尝试转到 sitename.com/fakelanguage/ 时,我会转到 root/index.php 页面,而不是 404 页面。

有没有办法让所有案例都有效?

【问题讨论】:

  • 这是一个 XY 问题。你不知道如何做 X,所以你尝试 Y。Y 不工作,所以你问 Y。 xyproblem.info
  • 您真正想要的是一个国际化库,然后您只需维护一组文件,并将占位符传递给所选语言的翻译函数。
  • 试试这个库,例如github.com/Philipp15b/php-i18n

标签: php apache .htaccess url mod-rewrite


【解决方案1】:

在阅读了一些指南后,我找到了解决问题的方法。

这是我的.htaccess 代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

#Multi language version
RewriteCond %{REQUEST_FILENAME} -s  [OR]
RewriteCond %{REQUEST_FILENAME} -l  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

#EN
RewriteRule ^en/([^.]+)/?$ $1  [L,NC]
RewriteRule ^en/([^.]+\.php)/?$ $1  [L,NC]
RewriteRule ^en/?$ index.php  [L,NC]

#IT
RewriteRule ^it/([^.]+)/?$ $1  [L,NC]
RewriteRule ^it/([^.]+\.php)/?$ $1  [L,NC]
RewriteRule ^it/?$ index.php  [L,NC]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php  [L,NC]

ErrorDocument 404 /error.php

它适用于问题中列出的所有情况:

  • sitename.com/pagename目标root/pagename.php
  • sitename.com/pagename/目标root/pagename.php
  • sitename.com/pagename.php目标root/pagename.php

  • sitename.com/en/pagename目标root/pagename.php

  • sitename.com/en/pagename/目标root/pagename.php
  • sitename.com/en/pagename.php目标root/pagename.php

甚至这种情况

  • sitename.com/pagename.php/目标root/pagename.php
  • sitename.com/en/pagename.php/目标root/pagename.php

当我转到 sitename.com/fakelanguage/ 时,它最终将我带到页面 404

【讨论】:

  • 我试过这个,当我使用domain/en' . The only problem I get is, wenn I use domain/en/`时,它可以正常工作。那时我的css没有被加载。你知道我该如何解决吗?
  • 我通过使用图像和样式表等的绝对路径解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2012-10-14
  • 2020-08-28
  • 1970-01-01
  • 2014-08-06
  • 2015-02-08
  • 2013-11-26
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多