Как перенаправить несколько URL-адресов на один URL-адрес домашней страницы? - PullRequest
1 голос
/ 14 сентября 2010

У меня есть сайт, построенный на codeigniter, но я столкнулся с небольшой проблемой. Обычно доступ к домашней странице осуществляется через 3 разных URL-адреса:

www.domain.com / о

www.domain.com / о /

www.domain.com / о / home.html

Я бы хотел, чтобы первый и третий URL перенаправлялись на второй (www.domain.com/en/).

Я часами играюсь с .htaccess, и я не могу добиться каких-либо изменений.

Любая помощь будет очень признательна.

Edit: Вот мой текущий .htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]

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

RewriteRule ^en(/home.html)?$ /en/ [L]

Ответы [ 3 ]

2 голосов
/ 14 сентября 2010

RewriteRule ^en(/home.html)?$ /en/ [L]

Соответствует только / en и /en/home.html, без других URL.

1 голос
/ 14 сентября 2010

Ваше текущее решение не работает, потому что любые входные данные уже были захвачены RewriteRule ^(.*)$ /index.php/$1 [QSA,L] Флаг L обозначает последний, что означает, что дальнейшие правила обрабатывать не нужно.

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

#Everything from here has to do with the line mentioned above
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L] # This catches all input

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

RewriteRule ^en(/home.html)?$ /en/ [L]

Вместо этого все, что вы хотите обработать, должно быть перемещено вверх до этой строки:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /


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

RewriteRule ^en(/home.html)?$ /en/ [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]

Помимо этого, чтение регулярных выражений mod_rewrite и не может повредить здесь.

0 голосов
/ 14 сентября 2010

Может быть так же просто, как изменить

^en(/home.html)?$ /en/ [L]

до

^/en(/home.html)?$ /en/ [L] (обратите внимание на дополнительную косую черту)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...