Htaccess удалить index.php из url
У меня проблема, при которой Google индексировал некоторые страницы с неправильным URL-адресом.
Индекс URL-адреса:
http://www.example.com/index.php/section1/section2
Мне нужно, чтобы он перенаправлялся на:
http://www.example.com/section1/section2
.htaccess не является моей сильной стороной, поэтому любая помощь будет высоко оценена.
Спасибо заранее.
Ответы
Ответ 1
Это основное правило, чтобы скрыть index.php
от URL-адреса. Поместите это в свой корневой файл .htaccess
.
mod_rewrite
должен быть включен с PHP, и это будет работать для версии PHP выше 5.2.6.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
Ответ 2
Чтобы удалить index.php
из URL-адреса и перенаправить посетителя на версию страницы, отличную от index.php:
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
Это чисто перенаправит /index.php/myblog
на простой /myblog
.
Использование редиректа 301 сохранит рейтинг в поисковой системе Google.
Ответ 3
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?)
RewriteRule ^ /%1 [R=301,L]
Ответ 4
Предполагая, что существующий url
http://example.com/index.php/foo/bar
и мы хотим преобразовать его в
http://example.com/foo/bar
Вы можете использовать следующее правило:
RewriteEngine on
#1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC]
RewriteRule ^ /%1 [NE,L,R]
#2)internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]
В строке # 1 мы сначала сопоставляем строку запроса и записываем все после /index.php/, а зафиксированное значение сохраняется в % 1 var. Затем мы отправляем браузер на новый URL-адрес.
# 2 обрабатывает запрос внутренне. Когда браузер приходит в /foo/bar, # 2rule переписывает новый URL-адрес в расположение orignal.
Ответ 5
Выполните следующие шаги
1. Убедитесь, что модуль хостинга/вашего ПК mod_rewrite активен. если он не активен, попробуйте активировать таким образом, откройте файл httpd.conf. Вы можете проверить это в phpinfo.php, чтобы узнать.
измените этот параметр:
#LoadModule rewrite_module modules/mod_rewrite.so
чтобы перезапустить wamp
LoadModule rewrite_module modules/mod_rewrite.so
2. Затем перейдите в файл .htaccess и попробуйте изменить:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
, если выше не работает, попробуйте с этим:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
3. Переместите файл .htaccess в корневой каталог, где находится index.php.
www OR root folder
- index.php
- .htaccess
Ответ 6
Действия по удалению index.php из URL для вашего сайта WordPress.
- Проверьте, что на вашем сервере должен быть включен mod_rewrite.
Чтобы проверить, включен он или нет - Создайте 1 файл phpinfo.php в корневой папке с помощью приведенной ниже команды.
<?php
phpinfo?();
?>
Теперь запустите этот файл - www.yoursite.com/phpinfo.php, и он покажет mod_rewrite в разделе "Загрузка модулей".
Если не включен, то выполните следующие команды на вашем терминале.
sudo a2enmod rewrite
sudo service apache2 restart
- Убедитесь, что ваш .htaccess существует в корневой папке WordPress, если не создайте один файл .htaccess
Вставьте этот код в свой файл .htaccess: -
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Далее разрешите .htaccess для 666, чтобы он стал доступным для записи, и теперь вы можете вносить изменения в ваши постоянные ссылки WordPress.
Теперь перейдите в Настройки → Постоянные ссылки → и измените нужный вам формат URL.
Удалить этот код /index.php/%year%/%monthnum%/%day%/%postname%/
и вставьте этот код в пользовательскую структуру:/% postname%/
Если до сих пор не получилось, проверьте ваш хостинг, у меня был сервер digitalocean, поэтому я очистил его сам
Отредактировал файл /etc/apache2/sites-enabled/000-default.conf
Добавлена эта строка после DocumentRoot/var/www/html
<Directory /var/www/html>
AllowOverride All
</Directory>
Перезагрузите сервер apache
Примечание: /var/www/html будет корнем вашего документа
Ответ 7
Некоторые могут получить 403 с методом, перечисленным выше, используя mod_rewrite. Другое решение для перезаписи index.php заключается в следующем:
<IfModule mod_rewrite.c>
RewriteEngine On
# Put your installation directory here:
RewriteBase /
# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
Ответ 8
Это будет работать, используйте следующий код в файле .htaccess
ПереписатьEngine на
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
Ответ 9
Для получения дополнительной информации и учебника codeigniter
создайте файл .htaccess в корневом каталоге проекта и поместите ниже код для удаления index.php
RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Ответ 10
Я использовал много кодов из вышеупомянутых разделов для удаления index.php из базового URL. Но это не сработало с моей стороны. Таким образом, вы можете использовать этот код, который я использовал, и он работает правильно.
Если вам действительно нужно удалить index.php из базового URL, просто вставьте этот код в свой htaccess.
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]