2009-11-06 3 views
0

У меня есть мой сайт разбит на несколько папок по языку:.htaccess переписать в папку языков по умолчанию?

/ 
    /en/ 
    index.php 
    about-us.php 
    faq.php 
    ... 

    /fr/ 
    index.php 
    about-us.php 
    faq.php 
    ... 

    ... 
    etc. 

Я хотел бы иметь правила перезаписи, автоматически перезаписывает в папку en, если кто-то пытался войти mydomain.com/about-us.php.

FYI, у меня также есть правило перезаписи, которое удаляет расширение, поэтому я действительно хочу, чтобы mydomain.com/about-us переписывал mydomain.com/en/about-us. Вот мое существующее правило перезаписи, которое делает следующее:

# allows for extension-agnostic urls 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php 

Это имеет смысл? Кто-нибудь поможет мне здесь?

EDIT:

@Gumbo -

Вот что мой .htaccess файл выглядит следующим образом (это все, что в нем):

RewriteEngine On 

# defaults to the english site 
RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [L,R=301] 

# allows for extension-agnostic urls 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php 

Этот файл находится в корневом каталоге моего сайта (не в языковой папке). Я перезарядил свой веб-сервер, просто чтобы быть на безопасной стороне, и я все еще получаю сообщение об ошибке при попытке перейти к mydomain.com/about-us:

Not Found 

The requested URL /about-us was not found on this server. 

... где mydomain.com/en/about-us работает просто отлично.

Другие мысли?

+0

В 'директивы RewriteCond' принадлежат к' RewriteRule' ранее имели и не новый. Поэтому вам нужно расположить директивы как «RewriteRule ... RewriteCond ... RewriteCond ... RewriteRule», где первым «RewriteRule» является мое правило, а остальное - ваше исходное правило. – Gumbo

+0

Хорошо, я изменил его, но у меня такая же ошибка. Казалось, это не имело никакого значения. – neezer

+0

(отредактированная запись выше, чтобы отразить новый порядок правил) – neezer

ответ

2

Поместите это правило перед вашим правилом:

RewriteRule !^(fr|en)/ /en%{REQUEST_URI} [L,R=301] 

Или более общий:

RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [L,R=301] 
+0

Я предпочитаю второй, но я думаю, это зависит от количества языков. +1 –

+0

Кажется, что я не работаю для меня. Я поставил ваше правило - дословно - после двух моих условий перезаписи и перед моим существующим правилом перезаписи, но без радости (файл не найден). Есть что-то, что мне не хватает? – neezer

+0

@neezer: Где вы хотите использовать это правило? – Gumbo

Смежные вопросы