.htaccess - один язык в корневой папке, а другой в подкаталогах - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать веб-сайт с двумя или более языками, которые получают изменения на основе 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

Я пытался этот ответ и это , но он не работает.

Если перейти к sitename.com/en, все работает. Он загружает index.php файл. Но когда я перехожу на sitename.com/en/, я перехожу на страницу 404. То же самое на sitename.com/en/pagename/. И когда я пытаюсь перейти на sitename.com/fakelanguage/, я перехожу на страницу root/index.php вместо 404.

Есть ли способ заставить все дела работать?

1 Ответ

0 голосов
/ 31 октября 2018

Прочитав пару руководств, я нашел решение своей проблемы.

Это мой .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/

...