Перезапись Htaccess на определенную страницу / язык

#regex #apache #.htaccess #codeigniter #mod-rewrite

#регулярное выражение #apache #.htaccess #codeigniter #мод-перезапись

Вопрос:

Я пытаюсь перенаправить прослушивание на определенный домен. У меня есть 3 домена; — www.tocdesal.com

  • www.tocdesal.es

  • www.tocdesal.nl

Теперь я хочу добиться этого..

www.tocdesal.com > www.tocdesal.com/en_GB/

www.tocdesal.nl > www.tocdesal.com/nl_NL/

www.tocdesal.es > www.tocdesal.com/es_ES/

Вот некоторый код, который я использую для управления многоязычием и запрета людям создавать определенные папки. Я надеюсь, что кто-нибудь сможет мне помочь с этой функцией.

 <IfModule mod_rewrite.c>
    # Turn on URL rewriting
    RewriteEngine On

    # NON-WWW > WWW
    #RewriteCond %{HTTP_HOST} ^www.tocdesal.nl [NC]
    #RewriteRule (.*) http://www.tocdesal.nl/nl_NL/home/$1 [R=301,L]

    # CUSTOM REWRITES
    #Redirect 301 /[oldlink] [new-full-link]

    # We dont want snooping people
    Options -Indexes

    #RewriteCond %{REQUEST_URI} ^framework.*

    # If your website begins from a folder e.g localhost/my_project then 
    # you have to change it to: RewriteBase /my_project/
    # If your site begins from the root e.g. example.local/ then
    # let it as it is
    #RewriteBase /tvmoordrecht

    # Protect application and system files from being viewed when the index.php is missing
    RewriteCond $1 ^(framework/modules|framework/coremodules|framework/cicore|application|assets|custommodules)

    # Rewrite to index.php/access_denied/URL
    RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L]

    # Allow these directories and files to be displayed directly:
    RewriteCond $1 ^(index.php|robots.txt|favicon.ico|css|js|images|img|fonts|upload|framework/assets/|themes|framework/apps/elfinder|dev-cmslemonupdater|cmslemonupdater)

    # No rewriting
    RewriteRule ^(.*)$ - [PT,L]

    # Rewrite to index.php/URL
    RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule>
  

Ответ №1:

Вставьте эти 3 правила сразу после RewriteEngine On строки:

 RewriteCond %{HTTP_HOST} ^(?:www.)?tocdesal.com$ [NC]
RewriteRule !^en_GB/ http://www.tocdesal.com/en_GB%{REQUEST_URI} [NE,R=301,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www.)?tocdesal.nl$ [NC]
RewriteRule ^ http://www.tocdesal.com/nl_NL%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTP_HOST} ^(?:www.)?tocdesal.es$ [NC]
RewriteRule ^ http://www.tocdesal.com/es_ES%{REQUEST_URI} [NE,R=301,L]
  

Комментарии:

1. К сожалению, это не сработало. Тем не менее, я получил бесконечный цикл перенаправления. Я думаю, что это проблема в других строках, которая вызывает проблему. У меня нет такого таланта maby в .htaccess

2. Для какого URL-адреса вы получаете цикл?

3. .es теперь работает! Отлично! Есть ли также способ сделать так, чтобы не-www для всех доменов отдельно переходил на www.tocdesal . * если это можно сделать, я очень, очень счастлив.

4. Спасибо @anubhava, решение работает только тогда, когда я снова помещаю перезапись .com в .com переворачивается, отключается и зацикливается. Я также поставил правило как последнее в порядке 3 перезаписей, но это не помогло. Не очень важно, что он работает с доменом .com, это стандартная английская версия.

5. Я внес исправление в первое правило, чтобы предотвратить зацикливание.

Ответ №2:

Это то, что у меня есть сейчас. не-www перенаправляет на www для стандартного домена (.com), остальные перенаправляют на язык, на который настроен домен.

 <IfModule mod_rewrite.c>
    # Turn on URL rewriting
    RewriteEngine On

    # Redirects to the page with that language selected

    RewriteCond %{HTTP_HOST} !^www.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

    RewriteCond %{HTTP_HOST} ^(?:www.)?tocdesal.nl$ [NC]
    RewriteRule ^ http://www.tocdesal.com/nl_NL%{REQUEST_URI} [NE,R=301,L]

    RewriteCond %{HTTP_HOST} ^(?:www.)?tocdesal.es$ [NC]
    RewriteRule ^ http://www.tocdesal.com/es_ES%{REQUEST_URI} [NE,R=301,L]

    # CUSTOM REWRITES
    #Redirect 301 /[oldlink] [new-full-link]

    # We dont want snooping people
    Options -Indexes

    #RewriteCond %{REQUEST_URI} ^framework.*

    # If your website begins from a folder e.g localhost/my_project then
    # you have to change it to: RewriteBase /my_project/
    # If your site begins from the root e.g. example.local/ then
    # let it as it is
    #RewriteBase /tvmoordrecht

    # Protect application and system files from being viewed when the index.php is mi
    RewriteCond $1 ^(framework/modules|framework/coremodules|framework/cicore|applica

    # Rewrite to index.php/access_denied/URL
    RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L]

    # Allow these directories and files to be displayed directly:
    RewriteCond $1 ^(index.php|robots.txt|favicon.ico|css|js|images|img|fonts|uplo

    # No rewriting
    RewriteRule ^(.*)$ - [PT,L]

    # Rewrite to index.php/URL
    RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule>