Możesz użyć Include
dyrektywy w, httpd.conf
aby móc utrzymać przekierowania w innym pliku. Nie byłoby to jednak zbyt wydajne, ponieważ każde żądanie musiałoby być sprawdzane pod kątem wielu wyrażeń regularnych. Wymagane będzie także ponowne uruchomienie serwera po każdej zmianie pliku.
Lepszym sposobem na tak wiele przekierowań byłoby użycie dyrektywy typu RewriteMap w dbm
celu zadeklarowania mapy z URI na przekierowania. W ten sposób będzie wydajna, ponieważ wyszukiwania dbm są bardzo szybkie, a po zmianie mapy nie trzeba ponownie uruchamiać serwera, ponieważ httpd
sprawdza czas modyfikacji pliku mapy.
Reguły przepisywania wyglądałyby tak (testowane na moim komputerze Fedora 16):
RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
Mapa dbm zostałaby utworzona z mapy tekstowej /etc/httpd/conf/redirects.txt
wyglądającej tak:
/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/
za pomocą polecenia
httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
!=
i""
- Poprawiłem teraz mój przykład do działającej i przetestowanej wersji.?
adresie URL), ale jest to również możliwe . Tak jak teraz, po prostu dodaje ciąg zapytania do przekierowania, na przykładhttp://yourserver.com/foo?q=bar
przekierowuje dohttp://serverfault.com/?q=bar
.RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
dał błądRewriteMap dbm type db is invalid
. Ale kiedyRewriteMap redirects txt:/etc/httpd/conf/redirects.txt
go użyłem , zadziałało. Nadal chcę korzystać z metody mieszania, jak wyjaśniono, zamiast zwykłego tekstu. Ale nie mogłem wiele znaleźć na temat błędu dbm. Dzięki za pomoc.Napisałbym skrypt, który generuje nowy VHOST za pomocą samych linków z listy.
źródło