Apache2 mod_rewrite는 아무것도 하지 않는 것 같습니다.

Apache2 mod_rewrite는 아무것도 하지 않는 것 같습니다.

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문서 루트(사용자가 넣을 것으로 가정함)에 있는 모든 파일도 처리되지 않습니다.

관련 정보