2011-12-04 38 views
7

Tôi đang sử dụng mod_rewrite để định tuyến tất cả các yêu cầu tới index.php..htaccess bị bỏ qua khi sử dụng URI bí danh

cấu trúc thư mục của tôi là như sau:

/Users/Peter/Projects/Framework 
    /.htaccess 
    /index.php 

Trong file .htaccess của tôi, tôi có như sau:

RewriteEngine on 
RewriteCond $1 !^index\.php/ 
RewriteRule ^(.*)$ index.php/$1 [L] 

này hoạt động tốt khi tôi ghé thăm projects.localhost/framework/example.

Tôi cũng đã bí danh sau thành lập: Alias ​​/ ~ alias/Users/Peter/Dự án

Khi tôi hướng đến http://projects.localhost/~alias/framework/example tôi nhận được một lỗi 404 và sau đây trong nhật ký lỗi của tôi: File does not exist: /Users/Peter/Projects/framework/example

Dường như tệp .htaccess không được gọi khi tôi sử dụng URL bí danh (nhập sai vào tệp .htaccess không kích hoạt bất kỳ loại lỗi nào khi sử dụng URL bí danh dường như để xác nhận điều này).

AllowOveride được đặt thành Tất cả.

Làm cách nào để nhận được .htaccess hoạt động khi sử dụng URL bí danh và có quy tắc viết lại áp dụng nhất quán bất kể URL (bí danh hoặc không bí danh)?

Chỉnh sửa: Điều hướng đến projects.localhost/~alias/framework/index.php/example cũng hoạt động tốt, xác nhận rằng bí danh đang hoạt động đúng cách (ngoài việc không có quy tắc .htaccess được áp dụng cho nó).

+1

Bí danh dường như bỏ qua các gốc bình thường, và do đó các tập tin .htaccess đặt ở đó. Bạn có thể đặt một tệp .htaccess khác trong thư mục '/ Users/Peter/Projects' – Gerben

+0

Tôi đã thử đặt một tệp .htaccess trong thư mục dự án nhưng điều này cũng không ảnh hưởng đến URL bí danh. (Nó không ảnh hưởng đến url không có bí danh.) –

Trả lời

0

Bạn có chắc là bạn đã bật mod_rewrite không?

+0

Có, việc viết lại hoạt động tốt khi tôi sử dụng url không có bí danh –

8

Tôi đã tìm thấy câu hỏi của bạn có cùng vấn đề. và từ @Gerbens nhận xét tôi quản lý để tìm this part của cuốn cẩm nang Apache trong đó nêu:

# 
# /abc/def/.htaccess -- per-dir config file for directory /abc/def 
# Remember: /abc/def is the physical path of /xyz, i.e., the server 
#   has a 'Alias /xyz /abc/def' directive e.g. 
# 

RewriteEngine On 

# let the server know that we were reached via /xyz and not 
# via the physical path prefix /abc/def 
RewriteBase /xyz 

# now the rewriting rules 
RewriteRule ^oldstuff\.html$ newstuff.html 

Thêm một cơ sở viết lại vào tập tin .htaccess trong thư mục aliased giải quyết vấn đề của tôi.

Vì vậy, trong trường hợp của bạn

RewriteEngine on 
RewriteBase /~alias 
RewriteCond $1 !^index\.php/ 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

Tôi sẽ bỏ phiếu này hai lần nếu tôi có thể - lưu thịt xông khói của tôi! Cảm ơn, @danneth. –

+0

Tuyệt vời, cảm ơn. Vì vậy, không có RewriteBase, Apache cư xử một cách ngu ngốc bằng cách giả sử nó được truy cập từ đường dẫn vật lý. Tôi tự hỏi làm thế nào hành vi này đã không được báo cáo như là một lỗi. –

Các vấn đề liên quan