RewriteRule для htaccess, чтобы скрыть язык по умолчанию - PullRequest
0 голосов
/ 15 ноября 2011

В настройках Zend по умолчанию у меня есть следующие правила:

SetEnv APPLICATION_ENV offline

RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Когда я пытаюсь добавить следующую строку, происходит notfing:

RewriteRule ^en/(.*) $1 [L]

В результате я пытаюсь переписать permomently http://example.com/en/something до http://example.com/something В настоящее время обе ссылки работают по отдельности.

Отредактировано:

SetEnv APPLICATION_ENV offline

RewriteEngine On
Options +FollowSymlinks

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteCond %{REQUEST_URI} !^/en/
RewriteRule ^.*$ index.php [NC,L]

RewriteRule ^en/(.*) /$1 [L,R]

Это перенаправит языковые ссылки по умолчанию прямо в корень сайта!Большое спасибо.

Есть для LigHTTPD:

$HTTP["url"] != "^/en/" {
    url.rewrite-once = (
        "^/.*" => "index.php?/$1",
    )
}
url.redirect = (
    "^/en/.*" => "/$1",
)

1 Ответ

1 голос
/ 15 ноября 2011

Это потому, что RewriteRule ^.*$ index.php [NC,L] переписывает его и никогда не попадает в добавленное вами правило. Вам нужно добавить условие, чтобы запросы, начинающиеся с /en/, не переписывались в index.php:

# you regular stuff
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

# Add this condition
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule ^.*$ index.php [NC,L]

# Now you can rewrite /en
RewriteRule ^en/(.*) $1 [L,R]

Отредактировано: example.com/en/something перенаправляется на example.com/something, а затем переписывается на index.php.

...