Cho phép viết lại URL (mod_rewrite) bằng các tệp .htaccess trong ~ / Trang web trên Lion


13

Tôi không thể lấy mod_rewrite để hoạt động trên Lion. Tôi đang phát triển một số trang web cục bộ, trong ~ / Trang web, sử dụng tệp .htaccess. Tôi đang ở ngày 10.7.3 và tôi chưa chạm vào bất kỳ tệp cấu hình nào ngoại trừ việc bật PHP trong httpd.conf (hoạt động).

Tôi biết có ít nhất 2 câu hỏi về vấn đề này ở đây, nhưng các giải pháp chi tiết ở đó không hoạt động. Cũng không làm các giải pháp khác mà tôi đã tìm thấy trên web. Tôi phải làm điều gì đó ngu ngốc hoặc nhìn ra thứ gì đó, nếu không tôi có lẽ đang phát điên, nhưng nó không hoạt động.

Tôi đã thử tất cả những thứ thông thường:

  1. Trong /private/etc/apache2/users/<myusername>.conf, thay đổi AllowOverride Noneđến AllowOverride Allvà khởi động lại máy chủ web

  2. Ngoài ra, trong /private/etc/apache2/httpd.conf, thay đổi bất kỳ / tất cả các lần xuất hiện AllowOverride Nonethành AllowOverride All- Tôi đã thử nó ở tất cả các địa điểm khác nhau nơi các chỉ thị này được tìm thấy

  3. Về cơ bản, hãy thử tất cả các kết hợp có thể của các giá trị cho Optionsdòng trên / dưới AllowOverridedòng, bao gồm các giá trị:Indexes MultiViews FollowSymLinks All

Luôn luôn khởi động lại máy chủ web sau khi thay đổi như vậy, tất nhiên. Không có cái này hoạt động. Tất cả các url sạch của tôi chỉ đơn giản là không hoạt động; Tôi nhận được 404 - không tìm thấy. Nhật ký lỗi của Apache chỉ cung cấp cho tôi lỗi "Tệp không tồn tại:". Vì vậy, có vẻ như mô-đun mod_rewrite thậm chí không hoạt động.

Tôi chắc chắn rằng mod_rewrite được tải trong httpd.conf, đó là; Theo mặc định, cài đặt Lion là như vậy.

Điều điên rồ là mọi thứ đã hoạt động hoàn hảo - cho đến khi tôi chuyển sang một cỗ máy mới chạy Lion. Đó là, tôi loại trừ một lỗi trong các tệp .htaccess của tôi vì tôi biết nó đã hoạt động trước đó. Ngoài ra, nếu đó là một lỗi trong .htaccess, tôi sẽ nhận được một số loại thông báo lỗi từ mô-đun mod_rewrite trong error_log của Apache, ít nhất là cho tôi biết rằng chính mô-đun đang được gọi. Nhưng điều này không xảy ra.

Tôi đang nhìn cái gì đó? Tôi có phải thay đổi cài đặt cấu hình ở một nơi khác không? Tôi có phải thay đổi cấu hình của PHP không? Tại sao các hướng dẫn (như Cách kích hoạt mod_rewrite trên MacOSX Lionđể mod_rewrite hoạt động trên Mac OS X ) hoạt động cho người khác nhưng không phải cho tôi? :)

Tôi đã lãng phí hàng giờ cho việc này rồi. Bất kỳ trợ giúp sẽ được rất đánh giá cao.


BTW, tôi không muốn sử dụng MAMP. Tôi đã sử dụng MAMP trước đây và nó không chơi tốt với MySQL đã có trên hệ thống của tôi. Điều này sẽ thay thế một cơn đau đầu bằng một cơn đau đầu khác, vì vậy không, cảm ơn :)
Niels Heidenreich

BTW Tôi đang dùng OS X Lion tiêu chuẩn, KHÔNG phải Lion Server.
Niels Heidenreich

Điều này không trả lời câu hỏi, nhưng một cách khác để vật lộn với môi trường cục bộ của máy Mac để làm web dev là sử dụng thứ gì đó như Vagrant , cho phép bạn dễ dàng thiết lập và quản lý các cấu hình máy ảo.
Dan J

Câu trả lời:


12

Bạn nên đảm bảo rằng trong /etc/apache2/users/username.conf bạn có những điều sau đây:

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

FollowSymlinks và AllowOverride là rất cần thiết ở đây. Trong khi bạn đang gợi ý cả hai trong câu hỏi của mình, có thể bạn đã không cấu hình chúng một cách chính xác song song.

Hãy chắc chắn trong httpd.conf /private/etc/apache2/extra/httpd-userdir.conf cũng được bao gồm. Đó là theo mặc định.

Sau khi sửa đổi, khởi động lại máy chủ web để các thay đổi có hiệu lực.

Nếu bạn vẫn gặp sự cố, có thể có vấn đề với quy tắc viết lại thực tế của bạn. Bạn đã từng sử dụng chúng trong bối cảnh .htaccess chưa? Lưu ý rằng trong .htaccess, regex quy tắc viết lại được khớp với URI yêu cầu mà không có dấu gạch chéo hàng đầu và luôn liên quan đến thư mục chứa .htaccess , trong khi trong httpd.conf toàn cầu, URI phải khớp với dấu gạch chéo hàng đầu và là liên quan đến root web. Vì giả sử bạn có .htaccess trong thư mục con của ~ / Trang web, các quy tắc viết lại của bạn có thể hoạt động khác với khi .htaccess nằm trong thư mục gốc của máy chủ (ảo).

Để gỡ lỗi mod_rewrite, bạn có thể kích hoạt ghi lại ghi nhật ký. Bạn nên kích hoạt tính năng đó trong /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

Cảm ơn Gerry. Vâng, tôi đã thử điều đó; chỉ cần thử lại lần nữa; không làm việc không may Tôi chưa thay đổi .htaccess, nó ở trong ~ / Trang web / Khác, như trước đây. Điều này quá khó chịu :(
Niels Heidenreich

Hãy thử cho phép viết lại ghi nhật ký như tôi đã sửa đổi ở trên.
Gerry

OK, có vẻ như không có vấn đề gì với mod_rewrite cả, vì có vẻ như vậy; đó là tệp .htaccess hoàn toàn bị bỏ qua. Tôi có thể đặt bất kỳ rác vào đó và tôi không nhận được thông báo lỗi. Vì vậy, Apache không tải nó. Tôi đã kiểm tra quyền, chúng vẫn ổn (tập tin có thể đọc được trên thế giới). Tôi đã cố gắng làm cho nó thực thi, không thay đổi.
Niels Heidenreich

Nếu tôi đặt một .htaccess vào / Library / WebServer / Documents và mở " localhost " để kiểm tra thì nó sẽ hoạt động như mong đợi. Nó chỉ không hoạt động trong "~ / Trang web".
Niels Heidenreich

Tôi đã làm một cái gì đó điên rồ và tạo một tài khoản người dùng thứ hai với tên đăng nhập "testitester". Tôi đặt AllowOverride thành Tất cả trong .cs của người dùng đó. Tôi đã đặt một .htaccess chứa rác trong thư mục Trang web của người dùng đó. Nếu tôi truy cập localhost / ~ testitester, tôi sẽ gặp lỗi 500, như mong đợi.
Niels Heidenreich

1

Thêm tùy chọn + FollowSymLinks hoạt động tốt với tôi

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

những gì nó đang làm với Options +FollowSymLinks? Tôi chỉ cần thêm dòng đó nó hoạt động cho tôi
Kannika

1

Tôi đã gặp một vấn đề tương tự khi tệp .htaccess của tôi bị bỏ qua hoàn toàn trong khi trong thư mục con bên trong thư mục ~ / Trang web của tôi trong Virtualhost được thiết lập chính xác.

Đã dành một giờ cuối cùng để chơi xung quanh với các tệp cấu hình khác nhau và cài đặt AllowOverride Tất cả ở nhiều nơi khác nhau, cuối cùng tôi phát hiện ra rằng tệp .htaccess, trong khi nó trông giống như tệp .htaccess trong Finder, thực ra là tệp .htaccess.txt với mở rộng ẩn.

Để kiểm tra và thay đổi tệp .htaccess của bạn, nhấp chuột phải vào tệp đó và chọn Nhận thông tin và sau đó đảm bảo xóa mọi tiện ích mở rộng hàng đầu khỏi cuối, chẳng hạn như tiện ích tôi có:

Và bây giờ nó hoạt động!


1

Dưới đây .htaccess mục sửa chữa cho tôi

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

Đặt .htaccess vào / Library / WebServer / Documents và mở "localhost /"; để kiểm tra nó, hoạt động như mong đợi. Nó chỉ không hoạt động trong "~ / Trang web". Cảm ơn Niels Heidenreich vì điều này!


-1

Khi bạn nhập: / Users / tên người dùng / app_name

/ Đề cập đến thư mục gốc của máy chủ web:

"localhost /"

Nếu bạn sử dụng / ~ tên người dùng / app_name trong phần viết lại của mình thì nó sẽ hoạt động.


1
Các đường dẫn bắt đầu /luôn là các đường dẫn tuyệt đối cho Apache, xem định nghĩa về root máy chủ web trong http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.