#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]