2013-02-28 10 views
8

Chciałem służyć .xhtml pliki jakoJak mogę uciec przed znakiem slash `/` w Apache `<If>` regex dyrektywy?

  • application/xhtml+xml jeśli przeglądarka mówi, że akceptuje go.
  • text/html inaczej

Próbowałem to robić z mod_rewrite ale to nie działa z Options -FollowSymLinks (patrz Why I do I get 403 Forbidden when viewing files affected by Apache RewriteRule if I have `Options -FollowSymLinks`?).

Następnie próbowałem

<Files "*.xhtml"> 
    <If "%{HTTP:Accept} !~ /application\/xhtml\+xml/"> 
     ForceType text/html 
    </If> 
</Files> 

Ale pojawia się błąd składni: udało się skompilować wyrażenia regularnego.

Tymczasem, używam tego kodu ...

<Files "*.xhtml"> 
    <If "%{HTTP:Accept} !~ /xhtml\+xml/"> 
     ForceType text/html 
    </If> 
</Files> 

... który działa, ale chcę, aby dopasować odpowiedni typ MIME.

Odpowiedz

9

Można użyć kodu ucieczki, takiego jak \x2F zamiast /.

4

Wygląda na to, że ulepszenie to wciąż jest w budowie od czasu Apache 2.4. Członek zespołu Apache "covener" recommendsm#regexp# zamiast tego.

Tak Twój kod będzie wyglądać następująco ...

<If "%{HTTP:Accept} !~ m#application/xhtml\+xml#"> 
+1

Nie widzę że comment_3455 przez Covener. Ale sekcja [Other] (http://httpd.apache.org/docs/2.4/expr.html#other) mówi, że 'm # regexp #' jest alternatywą'/regexp/'. – Oriol

+0

Dziwne, kotwica wysyła mnie bezpośrednio do poprawnej odpowiedzi na dyskusję. Ale także świetne znalezisko na oficjalnej tabeli innych dokumentów. – lkraav

+1

'm # regexp #' działa dobrze dla mnie przy porównaniu z 'REQUEST_URI', który będzie zawierał ukośniki w typowym scenariuszu. – RjOllos

Powiązane problemy