mod_rewrite가 서버에서 활성화되었는지 확인하는 방법은 무엇입니까?


104

현재 저는 lightspeed 서버 와 함께 호스팅을 사용하고 있습니다. 호스팅 mod_rewrite이 활성화되어 있지만 스크립트가 작동하지 않습니다. URL에 액세스하려고 할 때마다 404-not found page가 반환 됩니다.

Apache로 실행되는 다른 서버에 동일한 코드를 넣었습니다. 저쪽에서 작동합니다. 내가 추측 그래서, 그것은이다 .htaccessmod_rewrite문제를.

그러나 호스팅 지원은 여전히 ​​mod_rewrite가 켜져 있다고 주장하므로 실제로 활성화되었는지 여부를 어떻게 확인할 수 있는지 알고 싶습니다.

을 (를) 확인하려고 phpinfo()했지만 운이 없습니다. 찾을 수 없습니다. mod_rewrite그들이 사용하고 있기 때문 lightspeed입니까?

확인할 방법이 있습니까? 제발 도와주세요. 감사합니다.

참고 :.htaccess코드는

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

나도 이렇게 해봤 어

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

그러나 같은 결과.

답변:


98

명령 줄에서 다음을 입력합니다.

sudo a2enmod 재 작성

다시 쓰기 모드가 이미 활성화되어있는 경우이를 알려줍니다!


모드 재 작성을 활성화하는 가장 쉬운 방법입니다.
안드로메다

3
예 ! 완벽합니다. 완벽합니다.
George Dimitriadis

일했다. 간단하고 쉽습니다. 감사합니다
완패 biplab

96
  1. mod_rewrite 모듈이 활성화되어 있는지 확인하려면 WAMP 서버의 루트 폴더에 새 php 파일을 만듭니다. 다음을 입력

    phpinfo();

  2. 브라우저에서 생성 된 파일에 액세스합니다.

  3. CtrlF검색을 엽니 다. 'mod_rewrite'를 검색합니다. 활성화 된 경우 '로드 된 모듈'로 표시됩니다.

  4. 그렇지 않은 경우 httpd.conf (Apache Config 파일)를 열고 다음 줄을 찾습니다.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. 시작 부분에서 파운드 ( '#') 기호를 제거하고이 파일을 저장하십시오.

  6. 아파치 서버를 다시 시작하십시오.

  7. 브라우저에서 동일한 PHP 파일에 액세스하십시오.

  8. 'mod_rewrite'를 다시 검색하십시오. 지금 찾을 수있을 것입니다.


9
PHP가 Apache 모듈로 실행될 때 phpinfo ()가 Apache Loaded Modules를 보고한다고 생각 합니다. OP는 PHP가 자체 mod_rewrite 호환 재 작성 엔진을 가진 Lightspeed에서 실행 중이라고 명시합니다.
MrWhite

2
첫 번째 단계에서는 다음을 입력해야합니다. <? php echo phpinfo (); ?>
Greg Noe

7
PHP를 CGI 응용 프로그램으로 실행하는 경우에는이 방법이 작동하지 않습니다 ( phpinfo()'서버 API'필드에 'CGI / FastCGI'가 표시되는 경우). phpinfo()활성화 된 모듈을 나열하지 않습니다. 이 경우 PHP CGI에서 mod_rewrite를 확인하는 방법을 참조하십시오 .
Rory O'Kane

67

가상 호스트 구성 파일을 사용하는 경우 해당 가상 호스트에 AllowOverride All다음과 같은 지시문이 있는지 확인하십시오 .

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

기본적으로 이것은 모든 .htaccess 지시문의 처리를 허용합니다.


3
감사. 나는 당신에게 버드 와이저를 빚지고 있습니다. <3
Nishant Ghodke

어떤 이는이 의미 하는가 ...<Directory ...>? 거기에 무엇을 넣을까요? .htaccess가있는 디렉토리?
João Pimentel Ferreira

예 실제로, ... 따옴표 사이에 언급해야 "..."htaccess로는 디렉토리
주앙 멘텔 페레이라

있었다. 나는 conf 파일을 서버에서 복사했고을 변경하는 동안 ServerName디렉토리 이름을 변경하지 않았으며 그 후 아파치가 다시 시작되면 괜찮 았습니다.
D. 댄

1
Richard이 답변이 효과가 있고 문제가 해결 되었다면 올바른 것으로 표시하고 @Jahmic에게 보상을 제공해야합니다.
Sinthia V

18

apache_get_modules ()가 인식되지 않거나 phpinfo (); .htaccess 파일에 해당 행을 추가하여 모드 재 작성을 테스트 해보십시오.

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

그리고 mod_rewrite.php :

<?php echo "Mod_rewrite is activated!"; ?>

15

콘솔:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart

나는 이것을 해결하기 위해 많은 노력을 기울 였고 이것을 시도하면 나를 위해 작동합니다. 이제 마지막 아파치와 우분투가 있습니다.
Fernando Sanchiz

15

만약

in_array('mod_rewrite', apache_get_modules())

반환 true하면 mod-rewrite가 활성화됩니다.


PHP 코드를 통해 재 작성 모듈이 활성화되었는지 여부를 확인하는 완벽한 한 줄 솔루션.
Shakeel Ahmed

12

PHP의 perdefined apache_get_modules()함수는 활성화 된 모듈 목록을 반환합니다. mod_rewrite이 활성화되어 있는지 확인하려면 서버에서 다음 스크립트를 실행할 수 있습니다.

<?php
print_r(apache_get_modules());
?>

위의 예가 실패하면 .htaccess파일을 사용하여 mod-rewrite를 확인할 수 있습니다.

작성 htaccess문서 루트에 파일을하고 다음의 RewriteRule의 추가 :

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

이제 http://example.com/HelloWorld를 방문하십시오 . 내부적으로 사이트의 /index.php 페이지로 전달됩니다 . 그렇지 않으면 mod-rewrite가 비활성화 된 경우 500 Internel 서버 오류가 발생합니다.

도움이 되었기를 바랍니다.


7.2를 사용하고 apache_get_modules가 정의되지 않았습니다. 편집 후 apache2를 다시 시작해야 .htaccess합니까?
Adi Prasetyo

1
htaccess를 사용할 때 서버를 다시 시작할 필요가 없습니다.
Amit Verma

12

터미널에서 다음 중 하나를 수행 할 수 있습니다.

apachectl -M
apache2ctl -M

2daygeek 에서 가져온


데비안 9에서는 작동하지만 루트로 로그인하거나 사용해야합니다sudo
androsfat

11

이것은 CentOS에서 작동합니다.

$ sudo httpd -M |grep rewrite_module

출력해야 함 rewrite_module (shared)


ssh 액세스 권한이 있다고 가정하면 CentOS에서 수행하는 가장 좋은 방법입니다. 감사합니다, @radtek!
John T.

10

이 코드가 .htaccess 파일에있는 경우 (mod_rewrite.c를 확인하지 않고)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

500 서버 오류가 발생하면 사이트의 모든 페이지를 방문 할 수 있습니다. 모드 재 작성이 켜져 있다고 말하는 것이 안전하다고 생각합니다.


3
그러면 500 오류없이 사이트의 일부 페이지에 액세스 할 수 있습니까? 이는 일반적으로 .htaccess 파일을 읽는 경우 mod_rewrite가 켜져 있어야 함을 의미합니다. 그러나 .htaccess가 읽히지 않을 수 있습니다. .htaccess 파일의 맨 위에 말도 안되는 문자를 써보십시오. Apache가 실제로 파일을 읽는 경우 500 서버 오류와 함께 연결이 끊어집니다. 읽고있는 경우 작동해야한다고 생각하지만 작동하지 않는 URL의 예를 제공 할 수 있습니까?
Clive

문제는 아파치 서버가 아니라 광속이라는 것입니다. 500 오류가 발생하지 않으며 404 오류가 발생합니다. 그래서 .htaccess가 활성화되지 않았는지 의심합니다.
knightrider 2011 년

대부분 그렇습니다. htaccess에 말도 안되는 문자를 넣고 다시 작성되지 않은 페이지 (예 : index.php)로 직접 이동할 때 500 오류가 발생하는지 확인합니다. 그렇지 않은 경우 Lightspeed로 .htaccess를 활성화하는 방법을 묻는 새 질문을 게시 할 가치가 있습니다
Clive

5

PHP 기능을 사용할 수 있습니다.

      apache_get_modules

mod_rewrite를 확인하십시오.

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules


2
apache_get_modules ()는 PHP가 Apache 모듈로 실행되는 경우에만 작동합니다. OP는 PHP가 Lightspeed에서 실행 중임을 나타냅니다.
MrWhite

5

Linux 시스템을 사용하는 경우 다음 폴더에서 apache2 (제 경우)에 대한 모든 활성화 모듈을 확인할 수 있습니다 ./etc/apache2/mods-available

cd /etc/apache2/mods-available

입력하려면 : ll -a
php (이 경우 php 7) 폴더에 사용 가능한 모듈을 확인하려면 /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

입력하려면 : ll -a


4

새 페이지를 만들고이 코드를 추가하기 만하면

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

이 페이지를 실행하면 모듈이 사용 가능하다는 것을 알 수 있습니다. 그렇지 않으면 호스팅에 요청할 수 있거나 로컬 컴퓨터에서 활성화하려면이 유튜브를 확인하십시오 .wamp apache에서 모듈 다시 쓰기와 관련된 단계별 자습서를 확인하십시오. https://youtu.be/xIspOX9FuVU?t=1m43s Wamp 서버 아이콘-> Apache-> Apache 모듈 및 모듈 다시 쓰기 옵션 확인


2

이 질문은 오래 알고하지만 당신은 당신의 아파치 설정 파일을 편집 할 수있는 경우 AllowOverride All에서AllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # 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:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

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

정확한 이름과 가능한 경우 변경해야하는 파일의 위치를 ​​알려주는 것이 좋습니다. 신규 이민자에게 도움이 될 것입니다. 감사합니다
MindRoasterMir

또한 아파치를 다시 만든 후에 만 ​​변경 사항이 적용된다는 점을 염두에 두어야합니다. 감사합니다
MindRoasterMir

1

다음을 입력하여 파일이 있는지 확인하기 만하면됩니다.

cat /etc/apache2/mods-available/rewrite.load

결과 줄은 다음으로 시작하는 주석을 달 수 없습니다. #


1

이 코드는 나를 위해 일했습니다.

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";

0

내가 정확한 문제가 있었다, 그때 추가, 사용자 정의 구조를 클릭하여 해결 /index.php/%postname%/하고 작동

이것이 내가 도대체 ​​무엇이 잘못되었는지 찾는 동안 누군가에게 스트레스를 덜어주기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.