#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>