我正在尝试创建一种使用两种或更多种语言的网站,该网站根据带有子文件夹的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
这就是我想要做的:
sitename.com/
目标root/index.php
sitename.com/en
目标root/index.php
sitename.com/en/
目标root/index.php
sitename.com/pagename
目标root/pagename.php
sitename.com/pagename/
目标root/pagename.php
sitename.com/en/pagename
目标root/pagename.php
sitename.com/en/pagename/
目标root/pagename.php
sitename.com/404
目标root/error.php
sitename.com/404/
目标root/error.php
sitename.com/en/404
目标root/error.php
sitename.com/en/404/
目标root/error.php
我尝试了this answer和this,但是没有用。
如果转到sitename.com/en
,一切正常。它加载index.php
文件。
但是,当我转到sitename.com/en/
时,将带我到404
页。 sitename.com/en/pagename/
上的情况相同。
当我尝试转到sitename.com/fakelanguage/
时,将带我转到root/index.php
页,而不是404
页。
有一种方法可以使所有情况都正常吗?
答案 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/