Ошибка 404 доступа Codigniter htaccess при производстве

#php #apache #.htaccess #codeigniter #mod-rewrite

#php #apache #.htaccess #codeigniter #мод-перезапись

Вопрос:

я очень новичок в серверных технологиях.я знаю, что этот вопрос задавался слишком много раз, но я действительно не могу его запустить. он запускается с
domain.com/2.0/index.php/test
но когда вы удаляете index.php он выдает

Запрошенный URL /2.0/test не был найден на этом сервере. Сервер Apache / 2.2.15 (CentOS) на domain.com порт 443

структура моего проекта
введите описание изображения здесь
Public_html
—2.0(это папка моего проекта, где может быть расположен ci.у него есть sys, app,.htaccess)
—.htaccess

Мой домен
https://domain.com/2.0/

о проблеме
у меня есть два htaccess, один из которых находится в корневом каталоге, упомянутом выше, один находится внутри папки 2.0
, и странно то, что когда-либо я писал в файле htaccess, это никогда ни на что не влияло

public_html/.htaccess

 <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
  

public_html/2.0/.htaccess

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

мой httpd.conf

 <VirtualHost *:443>
    ServerAdmin info@domain.com
    DocumentRoot /home/natural/public_html
    ServerName api01.domain.net
    ErrorLog /var/log/httpd/error_log
    CustomLog /var/log/access_log common

    SSLEngine on
    SSLCertificateFile /home/natural/api01.domain.net.crt
    SSLCertificateKeyFile /home/natural/api01.domoin.key

    <Directory />
    Options Indexes FollowSymLinks
        Allow from all
        AllowOverride None
    </Directory>
</VirtualHost>
  

я много ищу и слежу за всеми ответами по переполнению стека, но безуспешно.

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

1. Пожалуйста, обновите вопрос, чтобы включить содержимое этих файлов .htaccess. Вероятно, ответом было бы добавить условие перезаписи к тому, что находится в корневом каталоге, чтобы исключить все, что находится в папке 2.0. Или даже объединить два файла в один.

2. я обновил вопрос, добавил два моих htaccess

3. добавьте изображение вашей структуры папок

4. @AbdulManan ваш проект находится в версии 2.0? добавьте четкое изображение с папкой приложения и все

Ответ №1:

Директива «AllowOverride None» в httpd.conf отключит синтаксический анализ файла .htaccess в указанных каталогах (в данном случае /) — Можете ли вы подтвердить, что любой из ваших файлов .htaccess действительно анализируется?

Если нет, изменяет ли подраздел каталога в вашем файле httpd.conf, чтобы:

 <Directory />
Options Indexes FollowSymLinks
Allow from all
AllowOverride All
</Directory>
  

Решить проблему?

Для получения дополнительной информации:http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

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

1. спасибо за хороший повтор, я не меняю ни одного на ВСЕ, но не повезло

Ответ №2:

Я предполагаю, что 2.0 — это новая версия сайта. Похоже, что /2.0/.htaccess написано так, как будто оно ожидает быть в корневой папке. Попробуйте добавить RewriteBase /2.0/ после включения движка. Вы можете удалить ее позже, когда замените содержимое корневой папки на содержимое 2.0 ‘s.

Основная проблема заключается в вашем # Handle Front Controller... правиле. Он будет захватывать любые виртуальные URL-адреса, прежде чем они попадут в 2.0 папку. Попробуйте изменить его на это:

 RewriteRule ^(?!2.0(?:/|$)) index.php [L]
  

Это исключит 2.0 папку из виртуальных URL-адресов текущего сайта.

Вам все еще нужно, AllowOverride all как рекомендовано в другом ответе, и каталог должен быть таким же, как ваш DocumentRoot , а не / .

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

1. во-первых, 2.0 не является новой версией, ее что-то еще будет содержать root, веб-сайт 2.0 будет содержать api

2. вы хотите изменить вот так # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(?!2.0(?:/|$)) index.php [L]

3. Да, я имел в виду изменить эту одну строку, а не удалять другие.

Ответ №3:

Добавьте этот код в корневой файл->.htaccess

 RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^(?!2.0(?:/|$)) index.php [L]