Мод переписать новичка в CodeIgniter - PullRequest
1 голос
/ 31 июля 2010

Я довольно новичок в переписывании модов, и у меня возникают проблемы с получением правильного ответа:

Я бы хотел http://myurl.com/special и http://www.myurl.com/special для перенаправления наhttp://myurl/index.php/special без изменения URL-адреса посетителя в их браузере.

В настоящее время мой .htaccess выглядит так, чтобы удалить www из URL

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.myurl.com [NC]
RewriteRule ^(.*)$ http://myurl.com/$1 [L,R=301]
</IfModule>

Я попробовал кучуиз разных вещей, чтобы перенаправить специальный URL, но до сих пор у меня ничего не получалось, каждый с другим нежелательным результатом.Пожалуйста, дайте мне знать, если у вас есть идея о том, что я могу добавить здесь!

Я пробовал это:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^special$ /index.php/special$1 [NC]
RewriteCond %{HTTP_HOST} ^www.myurl.com [NC]
RewriteRule ^(.*)$ http://myurl.com/$1 [R=301]
</IfModule>

Это делает перенаправление http://myurl.com/special на контроллер по умолчанию, иhttp://www.myurl.com/special перенаправляет на http://myurl.com/index.php/special И изменяет URL в браузере.Ничто из этого не совсем верно, хотя второе ближе к тому, что мне нужно.

Ответы [ 2 ]

2 голосов
/ 31 июля 2010

о нет, для этого вам не нужен htaccess, просто используйте маршруты CI.Сначала измените ваш HTACESS следующим образом:

# Customized error messages.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

Этот способ намного лучше, и вам никогда не придется менять его ни на что, кроме папок img или чего-то другого, просто оставьте его чистым.теперь для вашего вопроса.

открыть маршруты php в папке Application-> config.

Теперь в CI все файлы по умолчанию направляются через index.php, поэтому я предполагаю, что вы все равно имеете в виду ваш контроллер по умолчанию для маршрутизации "контроллеров"как в вашем случае special назад на главный сайт, просто сделайте это:

если ваш контроллер по умолчанию все еще "приветствуется" во время загрузки, вы бы написали маршрут следующим образом:

$route['special/(:any)'] = "welcome";

Ваш URL не изменится, и все будет идеально

НО НЕ ОСТАНАВЛИВАЙТЕСЬ, ЧТОБЫ УБЕДИТЬСЯ .

это то, как будут выглядеть ваши маршруты после того, как вы закончите:

//these two are for CI 
$route['default_controller'] = "welcome";
$route['scaffolding_trigger'] = "";

//this is your route sending all and any traffic for special
//no matter how many levels it will always go to welcome->index.
$route['special/(:any)'] = "welcome";

//if you want to use sub-pages or other functions within your welcome controller 
//i.e. welcome->signup. then just send the route information to the controller like this:
$route['special/(:any)'] = "welcome/$1";

Класс маршрутизации в php очень мощный, и это только часть для более подробной информации о маршрутизации.страница:

Руководство пользователя CodeIgniter -> URI Routing

Надеюсь, я вас не смутил больше.Удачи

1 голос
/ 31 июля 2010

Предположим, что www.myurl.com и myurl.com настроены как ServerAliases в вашем VirutalHost, а затем просто ...

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
...