mod_rewrite에서 디렉토리를 어떻게 무시합니까?
modrewrite 규칙이 디렉토리를 건너 뛰도록하려고합니다 vip
. 아래에서 볼 수 있듯이 여러 가지를 시도했지만 소용이 없습니다.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteRule ^vip$ - [PT]
RewriteRule ^vip/.$ - [PT]
#RewriteCond %{REQUEST_URI} !/vip
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
/vip/
모든 요청이 폴더로 직접 전달되도록 modrewrite가 디렉토리 를 완전히 무시하려면 어떻게해야 합니까?
최신 정보:
명확성 :
- Dreamhost에서 호스팅됩니다.
- 폴더는 워드 프레스 디렉토리 내에 있습니다.
- / vip / 폴더에는 webdav .htaccess 등이 포함되어 있습니다 (중요하다고 생각하지는 않지만
이것을 다른 규칙 앞에 두십시오.
RewriteRule ^vip - [L,NC]
시작하는 모든 URI와 일치합니다 vip
.
-
수단은 아무것도하지 않습니다.- 는
L
이 마지막이어야합니다 의미한다; 다음 모든 것을 무시하십시오. NC
없는 경우 수단 (따라서 "VIP"의 일치).
시작하는 모든 항목과 일치 vip
합니다. 표현식 ^vip$
은 일치 vip
하지만 vip/
또는 일치 하지 않습니다 vip/index.html
. 은 $
당신의 몰락되었을 수 있습니다. 정말로 옳게하고 싶다면, ^vip(/|$)
일치하지 않도록 같이 가고 싶을 수도 있습니다.vip-page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
이것은 그것이 기존 파일인지 또는 디렉토리가 그것을 건드리지 않는지를 나타냅니다. site.com/vip에 액세스 할 수 있어야하며 재 작성 규칙이 발생하지 않아야합니다.
추가하는 코드와 재 작성 규칙 / 조건을 제공하는 모든 답변은 쓸모가 없습니다! 기본 WordPress 코드는 이미 필요한 모든 작업을 수행합니다.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
이 줄은 "기존 파일 ( -f
) 또는 디렉토리 ( -d
)가 아니라면 WordPress로 전달합니다. 규칙이 얼마나 구체적이거나 좋은지에 관계없이 추가 규칙을 추가하는 것은 중복됩니다. 이미 WordPress 규칙이 적용되어야합니다!
그래서 그들은 왜 작동하지 않습니까 ???
.htaccess
의 vip
디렉토리는 오류를 던지고있다. 디렉토리를 암호로 보호하는 경우에도 똑같은 일이 발생합니다.
해결책은 다음과 같습니다.
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
WordPress 코드 앞에 해당 줄을 삽입 한 다음 /err.txt를 만듭니다. 이렇게하면 WebDAV (또는 암호로 보호 된 디렉터리)에 오류가 발생하면 해당 파일로 이동하여 기존 기본 WordPress 조건 ( RewriteCond %{REQUEST_FILENAME} !-f
)에 걸리게됩니다 .
요약하면 최종 솔루션은 다음과 같습니다.
ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
내 특정 상황에서이 문제의 원인에 대해 더 많은 내용을 게시했습니다. Dreamhost의 Wordpress 및 WebDAV와 관련하여 많은 사람들이 내 사이트 에있을 것으로 예상 합니다 .
무시하려는 디렉토리에 이미 .htaccess 파일이 있다고 언급하셨습니다. 다음을 사용할 수 있습니다.
RewriteEngine off
해당 .htaccess에서 mod_rewrite 사용을 중지합니다 (해당 폴더에서 mod_rewrite를 사용 중인지 확실하지 않은 경우 해제 할 수 없기 때문에 도움이되지 않습니다).
코드의 다음 부분을 바꿔보십시오.
RewriteRule ^ vip /.$-[PT]
... 다음과 함께 :
RewriteCond % {REQUEST_URI}! (vip) [NC]
문제가 해결되어야합니다.
RewriteCond %{REQUEST_URI} !^pilot/
그렇게하는 방법입니다.
나는 wordpress를 사용하여 동일한 문제가 있었고 문제가 401 및 403 오류에 대한 적절한 처리기가없는 것과 관련이 있음을 발견했습니다.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
These conditions are already supposed not to rewrite the url of existing folders but they don’t do their job for password protected folders. In my case, adding the following two lines to my root .htaccess fixed the problem:
ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html
Of course you need to create the /misc/myerror.html,
This works ...
RewriteRule ^vip - [L,NC]
But ensure it is the first rule after
RewriteEngine on
i.e.
ErrorDocument 404 /page-not-found.html
RewriteEngine on
RewriteRule ^vip - [L,NC]
AddType application/x-httpd-php .html .htm
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
etc
In my case, the answer by brentonstrine (and I see matdumsa also had the same idea) was the right one... I wanted to up-vote their answers, but being new here, I have no "reputation", so I have to write a full answer, in order to emphasize what I think is the real key here.
Several of these answers would successfully stop the WordPress index.php from being used ... but in many cases, the reason for doing this is that there is a real directory with real pages in it that you want to display directly, and the
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
lines already take care of that, so most of those solutions are a distraction in a case like mine.
The key was brentonstrine's insight that the error was a secondary effect, caused by the password-protection inside the directory I was trying to display directly. By putting in the
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
lines and creating error pages (I actually created err401.html and err403.html and made more informative error messages) I stopped the 404 response being generated when it couldn't find any page to display for 401 Authentication Required, and then the folder worked as expected... showing an apache login dialog, then the contents of the folder, or on failure, my error 401 page.
I'm not sure if I understand your objective, but the following might do what you're after?
RewriteRule ^/vip/(.*)$ /$1?%{QUERY_STRING} [L]
This will cause a URL such as http://www.example.com/vip/fred.html to be rewritten without the /vip.
참고URL : https://stackoverflow.com/questions/163302/how-do-i-ignore-a-directory-in-mod-rewrite
'developer tip' 카테고리의 다른 글
텍스트 상자의 텍스트 끝에 커서 설정 (0) | 2020.10.23 |
---|---|
주문한 목록 번호의 스타일을 지정할 수 있습니까? (0) | 2020.10.23 |
Cygwin의 오프라인 설치 프로그램은 어디에서 다운로드 할 수 있습니까? (0) | 2020.10.23 |
Java 문자열을 ASCII 바이트 배열로 변환하는 방법은 무엇입니까? (0) | 2020.10.23 |
리디렉션을 일으키지 않고 URL에 조각을 추가 하시겠습니까? (0) | 2020.10.23 |