Удалить index.php и добавить www в htaccess Codeigniter

#php #.htaccess #codeigniter #rewrite

#php #.htaccess #codeigniter #переписывание URL

Вопрос:

сообщество stackoverflow. Я удалил site.com/index.php дублируйте, и я добавил www, поэтому он выглядит www.site.com и работает довольно нормально. После всех этих манипуляций я столкнулся с проблемой — если я захожу на свой сайт из поиска Google, который показывает версию, отличную от www, я перенаправляюсь на версию www, но я получаю / ? / в середине ulr, например site.com/?/reviews/acticle/3 …ты это сработал и открыл статью. Однако мне каким-то образом удалось избавиться от /? /, и прямо сейчас все работает нормально, но мой вопрос таков: если я пойду site.com/index.php он перенаправляет меня на домашнюю страницу, если я перейду напрямую, введя ее в f.e. site.com/index.php/reviews/article/3 это все еще работает. Итак, это плохой признак того, что он все еще работает и не перенаправляет меня? Я не могу получить к нему доступ любым другим способом, например, из поиска Google, кроме как ввести его самостоятельно. Вот мой файл htaccess, надеюсь, он не выглядит слишком большим беспорядком:

 Options  FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.info$
RewriteRule (.*) http://www.site.info/$1 [R=301,L] 

RewriteCond $1 !^(index.php|images|upload|robots.txt|css)
RewriteCond %{REQUEST_URI} !.(css¦js¦jpg¦gif)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L,QSA] 

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://www.site.info/$1 [R=301,L]
AddDefaultCharset UTF-8
  

Заранее спасибо!

Ответ №1:

Чтобы запустить Codeigniter на apache, вам нужна простая .htaccess и config.php настройка.

.htaccess

 RewriteEngine On

# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Remove WWW from the url
#RewriteCond %{HTTPS} !=on
#RewriteCond %{HTTP_HOST} ^www.(. )$ [NC]
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Optional to redirect trailing slashes
#RewriteRule ^(.*)/$ /$1 [L,R=301]

# Point all URI to codeigniter bootstrap except direct access to file or dir
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
  

application/config/config.php

 $config['base_url']  = '';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
  

Это приведет к:

www.site.com/reviews/acticle/3 —> site.com/reviews/acticle/3
www.site.com/index.php/reviews/acticle/3 —> site.com/reviews/acticle/3

а также избавиться от ? .

Комментарии:

1. Вам тоже спасибо, но проблема не в solved…my вопрос был немного запутан, поэтому я хочу прояснить, что в данный момент я могу получить доступ site.com/index.php/acticle/3 только набрав его самостоятельно, и все ссылки работают нормально. >:o но я также могу получить доступ site.com/article/3

2. Теперь вы заставляете меня по-другому взглянуть на ваш вопрос. Я предполагаю, что вы имеете в виду доступ к URI вашего сайта, например: site.com/index.php/article

3. Извините за путаницу. Но все же, это нужно исправить или нет? ссылки на веб-сайт и ссылки из поиска Google работают отлично, но если я захочу, я могу перейти на site.com/index.php/article ? Извините, что я тоже так запутался.

4. посмотрите, настроен ли ваш конфиг на то, чтобы не отображать index.php в его URI и поисковых индексах Google ваши страницы отображаются как site.com/reviews/article итак, вы закончили. Хотя вы сможете напрямую обращаться к своему URI с index.php в нем, но это то, о чем вам не нужно беспокоиться, ссылки на ваш сайт не будут затронуты, как только ваша конфигурация заработает должным образом, если вы хотите, чтобы пользователи получили доступ к URI вашего сайта, введя index.php в URI вы можете сделать перенаправление 301, но опять же, в этом нет особой необходимости.

5. ах, спасибо тебе большое, ты заставил меня успокоиться. это именно то, что я хотел услышать.

Ответ №2:

Чтобы удалить index.php от codeigniter:

 RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
  

Комментарии:

1. Спасибо, но это ничего не меняет. 🙁