Перепишите URL, если файл существует

Я должен перенаправить веб-запросы формы /{language}-{country}/{file} кому:

  1. /{language}-{country}/{file} если это существует, иначе
  2. /{language}/{file} если это существует, иначе
  3. /en-US/{file}

Существующее .htaccess выполняет требования 1 и 3. Какие изменения я должен выполнить требование 2?

.htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteCond $0 !i18n/en-US [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(i18n)/([^/]+)/(.*)$ $1/en-US/$3 [NC,L]

Обновление:

Мой новый .htaccess отвечает функциональному требованию, но кажется сверхсложным. Как я могу упростить его?

# If not exists {language}-{country}, try {language}
RewriteCond $0 i18n
RewriteCond $0 !en-us
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $0 ^(.*)(i18n)/(\w+)(-\w+)*/(.*)$
RewriteCond E:/webserver/app/$2/$3/$5 -f
RewriteRule ^(.*)(i18n)/(\w+)(-\w+)*/(.*)$ /app/$2/$3/$5 [L]

# If not exists {language}-{country} or {language}, try /en-us/
RewriteCond $0 i18n
RewriteCond $0 !en-us
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $0 ^(.*)(i18n)/(\w+)(-\w+)*/(.*)$
RewriteCond E:/webserver/app/$2/$3/$5 !-f
RewriteCond E:/webserver/app/$2/en-us/$5 -f
RewriteRule ^(.*)(i18n)/(\w+)(-\w+)*/(.*)$ /app/$2/en-us/$5 [L]
1
задан Anthony Faull 10 June 2010 в 12:47
поделиться

1 ответ

Попробуйте так:

RewriteCond $0 .+
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond i18n/$1/$3 .+
RewriteCond %{DOCUMENT_ROOT}/%0 -f [OR]
RewriteCond i18n/en-US/$3 .+
RewriteRule ^i18n/([a-zA-Z]{2})-([a-zA-Z]{2})/(.*) %0 [L]

Но это правило работает только при использовании в файле .htaccess в корне документа.

2
ответ дан 2 September 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: