При переходе на английскую версию - 404 ошибка Новый

Дополнение: Babel

Делаю мультиязычную версию сайта по инструкции, создал контексты
web:
Base URL
base_url
/

Culture key
cultureKey
ru

Site start
site_start
1

Site URL
site_url
monterart.com/

en:
Base URL
base_url
/en/

Culture key
cultureKey
en

Site start
site_start
46

Site URL
site_url
monterart.com/en/

Мой htaccess:
# MODX supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODX.
# E.g., "/modx" if your installation is in a "modx" subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

RewriteEngine On
RewriteBase /



# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
#RewriteCond %{HTTP_HOST} !^$
#RewriteCond %{HTTP_HOST} !^www\. [NC]
#RewriteCond %{HTTP_HOST} (.+)$
#RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] .

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


# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]



# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(ru|en|ua)/favicon.ico$ favicon.ico [L,QSA]
   
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(ru|en|ua)/assets(.*)$ assets$2 [L,QSA]
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(ru|en|ua)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]

# Make sure .htc files are served with the proper MIME type, which is critical
# for XP SP2. Un-comment if your host allows htaccess MIME type overrides.

#AddType text/x-component .htc



# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.

#php_flag register_globals Off



# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.

#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5



# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary

Создал плагин, назвал как требуется, поставил событие OnHandleRequest
Вывел ссылки сниппетом [[BabelLinks]]
Теперь при переходе на monterart.com/en/ выдает 404 ошибку, подскажите где я ошибся, и куда смотреть чтобы исправить
12 марта 2017, 21:05    Вячеслав Евгеньевич…   
1    228 0

Комментарии (2)

  1. Евгений Webinmd 12 марта 2017, 21:25 # 0
    я использую такой плагин на событие OnHandleRequest + friendly urls

    По этой инструкции

    <?php
    // Работаем только на фронтенде и только с friendly urls
    if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr' || !$modx->getOption('friendly_urls')) {return;}
    
    // Получаем запрашиваемый url
    $alias = $modx->getOption('request_param_alias', null, 'alias', true);
    $request = &$_REQUEST[$alias];
    
    // Выбираем контексты с настройкой base_url
    $q = $modx->newQuery('modContextSetting', array('key' => 'base_url', 'value:!=' => ''));
    $q->select('context_key,value');
    
    $contexts = array();
    $tstart = microtime(true);
    if ($q->prepare() && $q->stmt->execute()) {
    	// Учитываем наш запрос в БД
    	$modx->queryTime += microtime(true) - $tstart;
    	$modx->executedQueries++;
    	// Разбираем результаты
    	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
    		$base_url = trim($row['value'], '/');
    		$context = $row['context_key'];
    		// Если запрос начинается с base_url какого-то контекста
    		if (preg_match('/^('.$base_url.')\//i', $request)) {
    			// То переключаемся на этот контекст
    			// Web инициализируется в index.php - на него переключаться не нужно
    			if ($context != 'web') {
    				$modx->switchContext($context);
    			}
    			// Вырезаем base_url из запроса, чтобы MODX нашел ресурс по uri
    			$request = preg_replace('/^'.$base_url.'\//', '', $request);
    			// Дело сделано - выходим из цикла
    			break;
    		}
    	}
    }
    
    1. Разобрался в switchContext('en'); было switchContext('English');
      <?php
      if($modx->context->get('key') != "mgr"){
                      /* grab the current langauge from the cultureKey request var */
                      switch ($_REQUEST['cultureKey']) {
                          case 'en':
                              /* switch the context */
                              $modx->switchContext('en');
                              break;
                          case 'ua':
                              /* switch the context */
                              $modx->switchContext('Ukrainian');
                              break;
                          default:
                              /* Set the default context here */
                              $modx->switchContext('web');
                              break;
                      }
                      /* unset GET var to avoid
                       * appending cultureKey=xy to URLs by other components */
                      unset($_GET['cultureKey']);
                  }
              ?>
      Вы должны авторизоваться, чтобы оставлять комментарии.