Aktifkan penulisan ulang URL (mod_rewrite) menggunakan file .htaccess di ~ / Sites on Lion


13

Saya tidak bisa membuat mod_rewrite bekerja di Lion. Saya mengembangkan sejumlah situs web secara lokal, di ~ / Situs, menggunakan file .htaccess. Saya di 10.7.3 dan saya belum menyentuh file konfigurasi apa pun kecuali untuk mengaktifkan PHP di httpd.conf (yang berfungsi).

Saya tahu setidaknya ada 2 pertanyaan tentang ini di sini, tetapi solusi yang terperinci di sana tidak berhasil. Juga tidak ada solusi lain yang saya temukan di web. Saya harus melakukan sesuatu yang bodoh atau mengabaikan sesuatu, atau saya mungkin akan menjadi gila, tetapi itu tidak berhasil.

Saya sudah mencoba semua hal yang biasa:

  1. Di /private/etc/apache2/users/<myusername>.conf, ubah AllowOverride Noneke AllowOverride Alldan mulai ulang server web

  2. Selain itu, dalam /private/etc/apache2/httpd.conf, ubah setiap / semua kejadian AllowOverride Nonemenjadi AllowOverride All- Saya sudah mencobanya di semua tempat di mana arahan ini ditemukan

  3. Coba pada dasarnya semua kemungkinan kombinasi nilai untuk Optionsgaris di atas / di bawah AllowOverridegaris, termasuk nilai-nilai:Indexes MultiViews FollowSymLinks All

Selalu me-restart server web setelah perubahan seperti itu, tentu saja. Tidak ada yang berhasil. Semua url saya yang bersih tidak berfungsi; Saya mendapatkan 404 - tidak ditemukan. Log kesalahan Apache hanya memberi saya kesalahan "File tidak ada:". Jadi sepertinya modul mod_rewrite bahkan tidak berfungsi sama sekali.

Saya memastikan bahwa mod_rewrite dimuat di httpd.conf, yang mana; begitu secara default pada instalasi Lion.

Yang gila adalah semuanya telah bekerja dengan sempurna - sampai saya bermigrasi ke mesin baru yang menjalankan Lion. Artinya, saya mengesampingkan kesalahan dalam file .htaccess saya karena saya tahu itu berfungsi sebelumnya. Juga, jika itu adalah kesalahan dalam. Tetapi ini tidak terjadi.

Apakah saya mengabaikan sesuatu? Apakah saya harus mengubah pengaturan konfigurasi di tempat lain? Apakah saya harus mengubah konfigurasi PHP? Mengapa instruksinya (seperti Cara mengaktifkan mod_rewrite di MacOSX Lion dan membuat mod_rewrite bekerja di Mac OS X ) bekerja untuk orang lain tetapi tidak untuk saya? :)

Saya sudah membuang-buang waktu untuk hal ini. Bantuan apapun akan sangat dihargai.


BTW, saya tidak ingin menggunakan MAMP. Saya menggunakan MAMP sebelumnya dan itu tidak cocok dengan MySQL yang sudah ada di sistem saya. Ini akan menggantikan satu sakit kepala dengan sakit kepala lainnya, jadi tidak, terima kasih :)
Niels Heidenreich

BTW Saya menggunakan OS X Lion standar, BUKAN Lion Server.
Niels Heidenreich

Ini tidak menjawab pertanyaan, tetapi alternatif untuk bergulat dengan lingkungan lokal Mac Anda untuk melakukan dev web adalah dengan menggunakan sesuatu seperti Vagrant , yang memungkinkan Anda dengan mudah mengatur dan mengelola konfigurasi mesin virtual.
Dan J

Jawaban:


12

Anda harus memastikan bahwa di /etc/apache2/users/username.conf Anda memiliki yang berikut:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

FollowSymlinks dan AllowOverride sangat penting di sini. Meskipun Anda mengisyaratkan keduanya dalam pertanyaan Anda, mungkin Anda tidak mengonfigurasi ini dengan benar bersama-sama.

Pastikan di httpd.conf /private/etc/apache2/extra/httpd-userdir.conf juga disertakan. Secara default.

Setelah modifikasi apa pun, mulai ulang server web agar perubahan diterapkan.

Jika Anda masih mengalami masalah, mungkin ada masalah dengan aturan penulisan ulang Anda yang sebenarnya. Apakah Anda menggunakannya dalam konteks .htaccess sebelumnya juga? Perhatikan bahwa dalam .htaccess, aturan penulisan ulang regex dicocokkan dengan permintaan URI tanpa garis miring utama dan selalu relatif terhadap direktori tempat .htaccess berada , sedangkan dalam httpd.conf global, URI harus cocok dengan garis miring yang terkemuka dan relatif terhadap root web. Karena diasumsikan Anda memiliki .htaccess di subdirektori ~ / Sites, aturan penulisan ulang Anda mungkin berperilaku berbeda dari ketika .htaccess berada di root web host (virtual).

Untuk men-debug mod_rewrite Anda dapat mengaktifkan penulisan ulang logging. Anda harus mengaktifkannya di /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

Terima kasih gerry. Ya, saya mencobanya; coba saja lagi; sayangnya tidak bekerja. Saya belum mengubah .htaccess, itu ada di ~ / Sites / ..., seperti sebelumnya. Ini terlalu frustasi :(
Niels Heidenreich

Coba aktifkan penulisan ulang logging seperti yang saya ubah di atas.
Gerry

OK, itu sama sekali bukan masalah dengan mod_rewrite, seperti yang terlihat; itu file .htaccess yang sepenuhnya diabaikan. Saya dapat menempatkan sampah apa pun ke dalamnya dan saya tidak mendapatkan pesan kesalahan. Jadi Apache tidak memuatnya. Saya memeriksa izin, mereka ok (file dapat dibaca dunia). Saya mencoba membuatnya dapat dieksekusi, tidak ada perubahan.
Niels Heidenreich

Jika saya menempatkan .htaccess ke / Library / WebServer / Documents dan buka " localhost " untuk mengujinya, ini berfungsi seperti yang diharapkan. Itu tidak berfungsi di "~ / Situs".
Niels Heidenreich

Saya melakukan sesuatu yang gila dan membuat akun pengguna kedua dengan nama login "testitester". Saya mengatur AllowOverride ke Semua di .conf pengguna itu. Saya menempatkan .htaccess yang berisi sampah di folder Situs pengguna itu. Jika saya pergi ke localhost / ~ testitester, saya mendapatkan 500 kesalahan, seperti yang diharapkan.
Niels Heidenreich

1

Menambahkan Opsi + FollowSymLinks bekerja dengan baik untuk saya

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

apa yang dilakukannya dengan Options +FollowSymLinks? Saya hanya menambahkan baris itu berfungsi untuk saya
Kannika

1

Saya mengalami masalah yang sama ketika file .htaccess saya diabaikan sepenuhnya ketika berada di dalam subfolder di dalam direktori ~ / Sites saya di bawah VirtualHost yang telah diatur dengan benar.

Setelah menghabiskan satu jam terakhir bermain-main dengan file konfigurasi yang berbeda dan mengatur AllowOverride All di berbagai tempat, saya akhirnya menemukan bahwa file .htaccess, sementara itu tampak seperti file .htaccess di Finder, sebenarnya file .htaccess.txt dengan ekstensi disembunyikan.

Untuk memeriksa dan mengubah file .htaccess Anda, klik kanan padanya dan pilih Dapatkan Info lalu pastikan untuk menghapus ekstensi utama apa pun dari akhir, seperti yang saya punya:

Dan sekarang berhasil!


1

Di bawah ini. Entri htaccess memperbaiki untuk saya

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

Menempatkan .htaccess ke / Library / WebServer / Documents dan buka "localhost /"; untuk mengujinya, berfungsi seperti yang diharapkan. Itu tidak berfungsi di "~ / Situs". Terima kasih Niels Heidenreich untuk ini!


-1

Saat Anda mengetik: / Users / username / app_name

The / merujuk ke root dari server web:

"localhost /"

Jika Anda menggunakan / ~ nama pengguna / app_name dalam penulisan ulang Anda, itu akan berfungsi.


1
Path yang dimulai dengan /selalu path absolut untuk Apache, lihat definisi root server web di http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.