Lion의 ~ / 사이트에있는 .htaccess 파일을 사용하여 URL 다시 쓰기 (mod_rewrite) 활성화


13

Lion에서 mod_rewrite를 사용할 수 없습니다. ~ / 사이트에서 .htaccess 파일을 사용하여 여러 웹 사이트를 로컬로 개발하고 있습니다. 나는 10.7.3에 있고 httpd.conf에서 PHP를 활성화하는 것을 제외하고는 구성 파일을 만지지 않았습니다 (작동합니다).

나는 이것에 대해 적어도 2 가지 질문이 있다는 것을 알고 있지만 거기에 자세한 해결책은 효과가 없습니다. 웹에서 찾은 다른 솔루션도 마찬가지입니다. 나는 어리 석거나 무언가를 간과해야합니다. 그렇지 않으면 아마도 미쳐 가고 있지만 작동하지 않습니다.

나는 모든 평범한 것들을 시도했다.

  1. 에서 /private/etc/apache2/users/<myusername>.conf변화 AllowOverride NoneAllowOverride All웹 서버를 다시 시작

  2. 또한,에가 /private/etc/apache2/httpd.conf,의 / 모든 사건 (들) 변경 AllowOverride NoneAllowOverride All이러한 지침이 발견되는 곳 나는 모든 다양한 장소에서 그것을 시도했습니다를 -

  3. 기본적으로 값을 포함하여 Options행 위 / 아래의 AllowOverride행에 가능한 모든 값 조합을 시도하십시오 .Indexes MultiViews FollowSymLinks All

물론 그러한 변경 후에는 항상 웹 서버를 다시 시작하십시오. 이 중 어느 것도 작동하지 않습니다. 내 깨끗한 URL은 모두 작동하지 않습니다. 404를 얻지 못했습니다. Apache의 오류 로그는 "파일이 존재하지 않습니다 :"오류를 표시합니다. 따라서 mod_rewrite 모듈이 전혀 작동하지 않는 것 같습니다.

mod_rewrite가 httpd.conf에로드되어 있는지 확인했습니다. 기본적으로 Lion 설치에서 그렇습니다.

미친 것은 사자를 운영하는 새로운 기계로 마이그레이션 할 때까지 모든 것이 완벽하게 작동했다는 것입니다. 즉, .htaccess 파일에서 오류가 발생했기 때문에 이전에 작동했음을 알고 있습니다. 또한 .htaccess의 오류 인 경우 Apache의 error_log에있는 mod_rewrite 모듈에서 일종의 오류 메시지를 얻습니다. 적어도 모듈 자체가 호출되고 있음을 알려줍니다. 그러나 이것은 일어나지 않습니다.

내가 뭔가를 내려다보고 있습니까? 다른 곳에서 구성 설정을 변경해야합니까? PHP 설정을 변경해야합니까? 왜 지시 있습니다 (같은 에서라도 사자에 활성화 mod_rewrite를하는 방법이맥 OS X에 대한 작업에 mod_rewrite를을 얻는 ) 다른 사람에 대한하지만 나를 위해 일? :)

나는 이미 이것에 몇 시간을 낭비했다. 어떤 도움이라도 대단히 감사하겠습니다.


BTW, MAMP를 사용하고 싶지 않습니다. 전에 MAMP를 사용했는데 이미 시스템에있는 MySQL에서는 제대로 작동하지 않았습니다. 이것은 더 감사합니다 :) 다른 두통과 하나 개의 두통을 교체하지 그렇게 될 것이다
닐스 Heidenreich

BTW 저는 Lion Server가 아닌 표준 OS X Lion을 사용하고 있습니다.
Niels Heidenreich

이 질문에 대한 답은 아니지만 웹 개발을 위해 Mac의 로컬 환경과 씨름하는 대안은 가상 컴퓨터 구성을 쉽게 설정하고 관리 할 수있는 Vagrant 와 같은 것을 사용하는 것 입니다.
Dan J

답변:


12

/etc/apache2/users/username.conf에 다음이 있는지 확인해야합니다.

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

FollowSymlinks와 AllowOverride는 여기서 필수적입니다. 귀하의 질문에 두 가지 모두를 암시하는 동안 올바르게 구성하지 않았을 수 있습니다.

httpd.conf /private/etc/apache2/extra/httpd-userdir.conf에 포함되어 있는지 확인하십시오. 기본적으로 사용됩니다.

수정 한 후 웹 서버를 다시 시작하여 변경 사항을 적용하십시오.

여전히 문제가있는 경우 실제 재 작성 규칙에 문제가있을 수 있습니다. 이전에도 .htaccess 컨텍스트에서 사용 했습니까? .htaccess에서 재 작성 규칙 정규식은 선행 슬래시없이 요청 URI와 일치하며 항상 .htaccess가있는 디렉토리상대적으로 일치하지만 전역 httpd.conf에서는 URI가 선행 슬래시와 일치해야합니다. 웹 루트를 기준으로합니다. ~ / Sites의 하위 디렉토리에 .htaccess가 있다고 가정하므로 재 작성 규칙은 .htaccess가 (가상) 호스트의 웹 루트에있을 때와 다르게 작동 할 수 있습니다.

mod_rewrite를 디버깅하기 위해 다시 쓰기 로깅을 활성화 할 수 있습니다. /etc/apache2/httpd.conf에서 활성화해야합니다.

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

고마워요. 그렇습니다. 그냥 다시 시도하십시오. 불행히도 작동하지 않습니다. .htaccess를 변경하지 않았습니다. ~ / Sites /…에 있습니다. 이것은 너무 실망입니다 :(
Niels Heidenreich

위에서 수정 한 것처럼 다시 쓰기 로깅을 활성화하십시오.
Gerry

좋아, 그것은 mod_rewrite에 전혀 문제가되지 않습니다. 완전히 무시되는 .htaccess 파일입니다. 정크를 넣을 수 있으며 오류 메시지가 나타나지 않습니다. 따라서 Apache는로드하지 않습니다. 권한을 확인 했는데도 괜찮습니다 (파일을 세계적으로 읽을 수 있음). 나는 그것을 실행 가능하게 만들려고 노력했다.
Niels Heidenreich

.htaccess를 / Library / WebServer / Documents에 배치하고 " localhost "를 열어 테스트하면 예상대로 작동합니다. "~ / Sites"에서는 작동하지 않습니다.
Niels Heidenreich

나는 미친 짓을하고 로그인 이름이 "testitester"인 두 번째 사용자 계정을 만들었습니다. 해당 사용자의 .conf에서 AllowOverride를 All로 설정했습니다. 해당 사용자의 사이트 폴더에 정크가 포함 된 .htaccess를 배치했습니다. localhost / ~ testitester로 이동하면 예상대로 500 오류가 발생합니다.
Niels Heidenreich

1

옵션 추가 + FollowSymLinks가 잘 작동했습니다.

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

무엇을하고 Options +FollowSymLinks있습니까? 난 그냥 나를 위해 작동 그 라인을 추가
Kannika

1

~ / Sites 디렉토리의 하위 폴더에서 올바르게 설정된 VirtualHost 아래의 하위 폴더에있는 동안 .htaccess 파일이 완전히 무시되는 비슷한 문제가 발생했습니다.

마지막 시간을 다른 구성 파일로 재생하고 다양한 위치에서 AllowOverride All을 설정 한 결과, Finder의 .htaccess 파일처럼 보이는 .htaccess 파일이 실제로는 .htaccess.txt 파일임을 알았습니다. 확장명이 숨겨져 있습니다.

.htaccess 파일을 확인하고 변경하려면 해당 파일을 마우스 오른쪽 버튼으로 클릭하고 정보 입수를 선택한 다음 맨 앞에있는 확장자를 제거하십시오.

그리고 지금 작동합니다!


1

.htaccess 항목 아래 수정

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

.htaccess를 / Library / WebServer / Documents에 배치하고 "localhost /"를여십시오. 그것을 테스트하기 위해 예상대로 작동합니다. "~ / Sites"에서는 작동하지 않습니다. 감사합니다 Niels Heidenreich!


-1

다음을 입력하면 : / Users / username / app_name

/는 웹 서버의 루트를 나타냅니다.

"localhost /"

다시 쓸 때 / ~ username / app_name을 사용하면 작동합니다.


1
로 시작하는 경로 /는 항상 Apache의 절대 경로입니다. http.conf ( <Directory "/Library/WebServer/Documents">) 의 웹 서버 루트 정의 참조
nohillside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.