Debian 10의 Apache2에서 mod_rewrite를 작동시키는 데 어려움을 겪고 있습니다. 다음으로 확장 기능을 활성화했습니다.
a2enmod rewrite
systemctl restart apache2
그리고 오류가 없었고 모듈을 볼 수 있습니다
apachectl -M
...
rewrite_module (shared)
...
사이트의 가상 호스트에 추가하면 사용 가능
<VirtualHost *:80>
ServerName default.nothing
ServerAlias www.default.nothing
DocumentRoot /var/www/html/public_html/00-default
<Directory "/volume/dev/html/public_html/00-default">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine on
RewriteRule ^192.168.20.87$ nothing
</Directory>
<IfModule mpm_user_module>
ServerEnvironment apache apache
</IfModule>
</VirtualHost>
URL이 다시 작성되기를 바라고 있습니다.http://192.168.20.87/page.php브라우저 탭에서 http://nothing/page.php로. RewriteRule에 무엇을 넣어도 아무 일도 일어나지 않는 것 같습니다. 내가 뭔가 하고 있는 게 확실해
답변1
RewriteEngine on RewriteRule ^192.168.20.87$ nothing
어떤 이유로 .htaccess로 수행하면 작동합니다.
http://192.168.20.87/page.php
"로 수행"하더라도 URL과 일치하지 않으므로 .htaccess
다음과 같이 해야 합니다.다른 일을 하고 있다?
위의 규칙( <Directory>
컨테이너에서 사용되는 경우)은 형식의 URL http://192.168.20.87/192.168.20.87
(또는 http://default.nothing/192.168.20.87
호스트 이름이 확인되는 경우)과 일치합니다.
그만큼RewriteRule
무늬호스트 이름(예: )이 아닌 URL 경로만 일치합니다 192.168.20.87
. 따라서 이는 /page.php
, (또는 page.php
- 상대 경로/슬래시 접두사 없음 -예배 규칙서<Directory>
또는 같은 맥락 .htaccess
)
따라서 이는 대신 다음과 같아야 합니다.
RewriteRule ^page\.php$ nothing
(여기서 무엇을 하려는지 확실하지 않지만 "아무것도 없음"이 무엇입니까? 404를 트리거하려는 경우 실제로는 그렇게 하는 방법이 아닙니다.)
@Gerrit가 주석에서 느슨하게 언급했듯이 지시어 RewriteRule
가섬기는 사람또는가상호스트컨텍스트(즉, <Directory>
또는 .htaccess
컨테이너에 없음 -예배 규칙서컨텍스트) 지시어와 일치하는 URL 경로는 RewriteRule
슬래시로 시작하는 루트 상대 경로입니다. 지시어가 파일 시스템에 매핑되기 전에 훨씬 일찍 처리되기 때문입니다. 예. ^/page\.php$
.
업데이트:
DocumentRoot /var/www/html/public_html/00-default <Directory "/volume/dev/html/public_html/00-default">
DocumentRoot
방금 귀하 와 <Directory>
지시문이 서로 다른 두 파일 시스템 위치를 참조하고 있는 것을 확인했습니다 . 질문의 정보가 제한되어 있으므로 이 <Directory>
컨테이너는 절대 처리되지 않습니다.
그러나 다른 곳에 추가 지시문이 없는 한(꼭 있어야 한다고 가정함) .htaccess
문서 루트(사용자가 넣을 것으로 가정함)에 있는 모든 파일도 처리되지 않습니다.