2011-08-16 3 views
1

캐시를 구현하기 위해 파일이나 디렉토리가없는 URL을 리디렉션하고 싶습니다. 구성은 (을 httpd.conf에서 .htaccess로하지 않음) 다음과 같습니다Apache mod_rewrite가 -f -and -d를 사용하여 기존 파일을 사용하지 않음

<Directory /srv/xxx/htdocs> 
      Options FollowSymLinks +Indexes 

      RewriteEngine On 
      RewriteCond %{REQUEST_FILENAME}  !-f 
      RewriteCond %{REQUEST_FILENAME}  !-d 
      RewriteRule ^text/([0-9]+)$    /page.php?id_text=$1 [QSA] 
      RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$ /page.php?url=$2 [QSA] 
    </Directory> 

그러나 모든 파일 이름을 다시 쓰기 로그 쇼로 다시 쓰기 공장을 통해 실행되는 기존 파일의 심지어는. 따라서 기존 파일을 사용할 수 없으므로 파일 시스템 캐시를 사용할 수 없습니다.

원인은 무엇입니까?

요청 http://ovula.xxx.net/Ovula/Kinderwunsch__ich_will_schwanger_werden

파일이 존재 : 재 작성 로그에서

[email protected]:/srv/ovula.xxx.net/htdocs$ pwd 
/srv/ovula.xxx.net/htdocs 
[email protected]:/srv/ovula.xxx.net/htdocs$ ls Ovula 
Kinderwunsch__ich_will_schwanger_werden 
[email protected]:/srv/ovula.xxx.net/htdocs$ 

:

80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) init rewrite engine wit 
h requested uri /Ovula/Kinderwunsch__ich_will_schwanger_werden 
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^text 
/([0-9]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden' 
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^([^/ 
]+/)*([A-Za-z0-9_]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden' 
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (1) pass through /Ovula/Kin 
derwunsch__ich_will_schwanger_werden 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula. 
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw 
unsch__ich_will_schwanger_werden 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula. 
xxx.net/htdocs/] applying pattern '^text/([0-9]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden' 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula. 
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw 
unsch__ich_will_schwanger_werden 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula. 
xxx.net/htdocs/] applying pattern '^([^/]+/)*([A-Za-z0-9_]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden' 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) [perdir /srv/ovula. 
xxx.net/htdocs/] rewrite 'Ovula/Kinderwunsch__ich_will_schwanger_werden' -> '/page.php?url=Kinderwunsch__ich_will_schwanger_werden' 
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) split uri=/page.php?url=Kinderwunsch__ich_will_schwanger_werden -> uri=/page.php, args=url=Kinderwunsch__ich_will_schwanger_werden 
+0

요청한 URL과 실제 파일 이름을 모두 표시 할 수 있습니까? –

+0

어떤 규칙이 의도 한대로 작동하지 않습니다 :이 하나는 /page.php? id_text = 또는 두 번째 것은'/page.php? url ='?? – LazyOne

+0

모든 규칙이 적용됩니다. 이것이 문제입니다. 기존 파일에는 적용하지 않아야합니다. – smantscheff

답변

2

한다 RewriteCond 조건은 단 하나의 규칙이 적용됩니다. 이후 세트의 모든 규칙에 적용하려면 다음과 같이 사용할 수 있습니다.

 RewriteCond %{REQUEST_FILENAME}  -f [OR] 
     RewriteCond %{REQUEST_FILENAME}  -d 
     RewriteRule . - [L] 

     RewriteRule ^text/([0-9]+)$    /page.php?id_text=$1 [QSA] 
     RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$ /page.php?url=$2 [QSA] 
+0

고마워, 그 트릭을 했어. – smantscheff

+0

@smantscheff이 답변을 받아 들인 것으로 표시하는 데 도움이된다면 thnx – LazyOne

+0

Hello LazyOne, 10 분 이상이 문제를 해결하기 위해 등록하려고 시도한 후에 다른 문제에 시간을 보냈습니다. 어쨌든 도움을 주셔서 감사합니다. – smantscheff

관련 문제