문제

웹 사이트를 작성하는 동안 .htaccess에 다음 규칙을 가지고있었습니다.

RewriteRule ^test/(.*) cgi-bin/router.py?request=$1 [NC]

사용자가 갈 때마다 mysite.com/test/something 그들은 리디렉션됩니다 cgi-bin/router.py?request=something. 이것은 매우 잘 작동했습니다. 나는 이제 사이트를 마치고 '켜고 싶다'고 말했다. 그러나 단순히 제거합니다 test/ 규칙에서 비트가 작동하지 않지만 여기 그리고 여기:

RewriteRule ^(.*) cgi-bin/router.py?request=$1 [NC]

나는 또한 시도했다 ^$ 그러나 URL에서 입력 한 사용자가 무엇이든 느슨해집니다.

내 regex가 잘못 되었습니까?

도움이 되었습니까?

해결책

추가 해보세요 / 그 앞에서, 그리고 a $ 결국.
처럼:

RewriteRule ^/(.*)$ cgi-bin/router.py?request=$1 [NC]

또한 사용하는 것이 가장 좋습니다 RewriteBase 테스트 할 때 지침. 그런 다음 정기적 인 표현 자체를 엉망으로 만드는 대신 변경할 수 있습니다.

RewriteBase /test/ 
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]

그리고 실제 세계로 이사했을 때 :

RewriteBase /
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]

편집하다
좀 더 테스트 한 후에는 문제가 표현 자체가 아니라 디렉토리 이름이라는 것을 알았습니다. cgi-bin/. 기본적으로 Apache는 CGI 스크립트 에이 디렉토리를 사용하지만 사용하지만 ScriptAlias 요청을 리디렉션합니다 /cgi-bin/* 다른 디렉토리로. 필자의 경우 Apache 설치 디렉토리에서 동일하게 명명 된 디렉토리.

이것은 당신이 직접 만든 디렉토리입니까, 아니면 Apache가이를 별칭으로 사용한 디렉토리를 사용하고 있습니까?
당신도해야합니다

  1. 디렉토리를 사용하여 구성에서 지정된 Apache를 사용하십시오
  2. 직접 지정할 수 있도록 구성을 편집하거나
  3. 다른 디렉토리 이름을 선택하십시오.

개인적으로, 나는 #3과 함께 갈 것입니다. 나는 이것을 시도했고 그것은 나를 위해 잘 작동했다.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} !bin/
    RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top