# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# config file for urlfilter-suffix plugin

# case-insensitive, allow unknown suffixes
+I

# filter on URL path only
+P
# comment out to filter on complete URL
# but be aware that the pattern
#    .com
#  will then reject
#    http://xyz.com
#    http://xyz.com/search?q=foo.com
#  while the pattern
#    .mp3
#  will not apply to (URLs will pass)
#    http://xyz.com/music.mp3?q=abc

### prohibit these
# pictures
.gif
.jpg
.jpeg
.bmp
.png
.tif
.tiff
.ico
.eps
.ps
.wmf
.fpx
.cur
.ani
.img
.lwf
.pcd
.psp
.psd
.tga
.xbm
.xpm

# web-formats
.css

# archives/packages
.arj
.arc
.7z
.cab
.lzw
.lha
.lzh
.zip
.gz
.tar
.tgz
.sit
.rpm
.deb
.pkg

# audio/video
.mid
.midi
.rmi
.mpeg
.mpg
.mpe
.mp3
.mp2
.aac
.mov
.fla
.flv
.ra
.ram
.rm
.rmv
.wma
.wmv
.wav
.wave
.ogg
.avi
.au
.snd

# executables
.exe
.com

# windows links
.lnk

# typo3-extensions
.t3x

# disc-images
.iso
.bin
