Cara mendapatkan Apache2 untuk mengarahkan ulang ke subdirektori

66

Saya menjalankan apache2 pada Debian etch, dengan beberapa host virtual.

Saya ingin mengarahkan agar http://git.example.compergi kehttp://git.example.com/git/

Seharusnya sangat sederhana, tetapi Google tidak cukup memotongnya. Saya sudah mencoba hal-hal Pengalihan dan Menulis Ulang dan mereka sepertinya tidak melakukan apa yang saya inginkan ...

Hamish Downer
sumber
Ada banyak cara Anda bisa mendekati ini, tetapi apa sebenarnya yang ingin Anda capai?
WerkkreW

Jawaban:

111

Merasa sedikit konyol - sedikit lebih googling muncul jawaban yang saya cari:

RedirectMatch ^/$ /git/

Pada dasarnya mengarahkan kembali root, dan hanya root.

Kode ini bisa dilakukan dalam .htaccessfile (ada tag untuk ini, jadi saya menganggap itu adalah kasus penggunaan asli). Tetapi jika Anda dapat mengedit, konfigurasi apache server utama kemudian meletakkannya di bagian situs web Anda mungkin di dalam <VirtualHost>bagian.

The docs untuk RedirectMatch mengatakan bahwa konteks dapat "konfigurasi server, virtual host, direktori, htaccess".

Hamish Downer
sumber
2
ok, jadi di mana harus meletakkan baris kode ini?
user230910
Saya harus meletakkan URI penuh ( https://example.com/git/) agar ini berfungsi. Aneh.
Mat M
3

Anda mendapat jawaban yang benar di sana dengan pengalihan. Anda harus berhati-hati ketika mengarahkan segala sesuatu ke tempat lain, karena Anda bisa mendapatkan pengalihan berulang di sana. Ini terjadi jika Anda ingin memasang halaman pemeliharaan.

Rory
sumber
4
Memang. Redirect / /git/menghasilkan kembang api rekursif.
Davor Josipovic
3

Anda dapat menggunakan arahan Redirect.

<Directory />
   Redirect permanent / http://git.example.com/git/
   ...
</Directory>

sumber
0

Jawaban yang diterima menyelesaikan masalah saya, tetapi saya juga menemukan bahwa saya harus menambahkan 404 redirect untuk halaman yang tidak ada - situasi saya adalah memiliki instalasi OwnCloud yang terletak satu tingkat di bawah root ( https://example.com/owncloud ) .

Ini berfungsi untuk saya, untuk mengirim semuanya ke subdirektori saya:

# redirect from root to subdirectory
RedirectMatch ^/$ /thesubdirectory/

# redirect on 404 to subdirectory
ErrorDocument 404 /thesubdirectory/index.php
J4yne
sumber
2
ErrorDocument harus mengembalikan halaman kesalahan, bukan dokumen yang berguna. Ini penting untuk perayap.
Jonah Benton