.htaccess-根文件夹中的一种语言,子目录中的另一种

时间:2018-10-30 16:27:08

标签: php apache .htaccess url mod-rewrite

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

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

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页。

有一种方法可以使所有情况都正常吗?

1 个答案:

答案 0 :(得分:0)

阅读了几本指南后,我找到了解决问题的方法。

这是我的.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

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