.htaccess 파일은 Apache에서 무시됩니다.

.htaccess 파일은 Apache에서 무시됩니다.

저는 codeigniter에서 PHP를 사용하여 웹 애플리케이션을 구축하고 있습니다. localhost에서는 모든 것이 잘 작동합니다. 그러나 httpd.conf의 모든 내용을 다루었음에도 불구하고 .htaccess 파일은 내 라이브 서버(RH7.1 Apache 2.4)에서 여전히 무시됩니다. Apache 서비스를 다시 시작했지만 아무런 효과가 없습니다. 무엇이 잘못될 수 있는지 아시나요?

.htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ ./index.php/$1 [L]

그리고

strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false

1을 반환합니다.

httpd.conf 값:

# Further relax access to the default document root:
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

. . . . .

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ".ht*">
    Require all denied
</Files>

답변1

문제는 .htaccess 콘텐츠에 있는 것 같습니다. 나는 그것을 다음으로 대체했습니다 :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

잘 작동하기 시작했습니다. 나는 이것에 조금 새로운 것입니다. 이전에 작동하지 않았던 이유와 새로운 .htaccess 파일 콘텐츠에서 작동하는 이유를 알려줄 수 있는 사람이 있나요?

답변2

이전에 작동하지 않았던 이유와 새로운 .htaccess 파일 콘텐츠에서 작동하는 이유를 알려줄 수 있는 사람이 있나요?


RewriteRule ^(.*)$ ./index.php/$1 [L]

원본 .htaccess파일은 첨부 파일의 일부로 요청된 URL 경로를 전달합니다.경로명 정보URL(일명 PATH_INFO)에 있습니다. 예를 들어. /index.php/foo/bar.

Codeigniter에서 이 기능을 활성화하려면 다음에서 명시적으로 설정해야 할 수도 있습니다 config.php.

$config['uri_protocol']  = 'PATH_INFO';

그러나 PATH_INFO이 지시문을 사용하여 Apache 서버 구성에서 이를 비활성화할 수도 있습니다 AcceptPathInfo.

RewriteRule ^(.*)$ index.php?/$1 [L]

그리고 "새" .htaccess파일은 요청된 URL 경로를 다음과 같이 갖게 됩니다.요청 매개변수대신에. 예를 들어. /index.php?/foo/bar(추가 참고 ?). 이는 Codeigniter의 기본 구성일 수 있으며 서버 구성에 관계없이 항상 작동합니다.

관련 정보