2011-12-21 38 views
8

Tôi đang cố tạo một trình rút gọn url và tôi muốn có thể lấy bất kỳ ký tự nào ngay sau tên miền và chuyển chúng thành url biến. Vì vậy, ví dụChuyển hướng tất cả lưu lượng truy cập đến index.php bằng cách sử dụng mod_rewrite

sẽ trở thành

Dưới đây là những gì tôi có cho mod_rewrite ngay bây giờ, nhưng tôi cứ bị một Bad Request 400:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) index.php?url=$1 [L,QSA] 
+1

Nhìn vào 'error.log' vì lý do lỗi thực tế. Nếu không, hãy thiết lập 'RewriteLog' – mario

+1

bản sao có thể có của [Simple Mod Rewrite] (http://stackoverflow.com/questions/7093190/simple-mod-rewrite) – mario

+0

-1: Cần gỡ lỗi thêm; xem bình luận của @ mario. –

Trả lời

11

Hãy thử thay thế ^(.*) với ^(.*)$

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

Edit: Hãy thử thay thế index.php với /index.php

RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA] 
+0

Tôi đã chụp, nhưng vẫn nhận được 400 Yêu cầu Không hợp lệ. Nhìn qua các bản ghi bây giờ, nhưng tôi không thể tìm thấy bất cứ điều gì có giá trị trong khi – bswinnerton

+1

@bswinnerton: Thử thêm một '/' trước 'index.php'. Kiểm tra câu trả lời cập nhật của tôi. –

+0

OK, vì vậy tôi không còn nhận được lỗi nữa, nhưng nó không chuyển hướng đến url = asdf khi tôi nhập/asdf =/ – bswinnerton

0

Hãy thử nó mà không sử dụng sử dụng RewriteCond.

+0

Nếu tôi nhận xét RewriteCond tôi vẫn nhận được lỗi 400. – bswinnerton

+2

Hai dòng 'RewriteCond' đó là đảm bảo rằng các tệp và thư mục thực sự tồn tại không được viết lại. Ví dụ: 'http: // example.com/images/logo.png' sẽ không được viết lại nếu hình ảnh đó tồn tại. –

+0

@Rocket Tốt để biết để tham khảo trong tương lai. Tôi chỉ đang làm việc với thông tin tôi đã được đưa ra. – PseudoNinja

-1

Kiểm tra dưới module Apache và chắc chắn rằng rewrite module được kích hoạt. Tôi đã có một vấn đề tương tự và nó đã được giải quyết bằng cách kích hoạt module ghi đè.

+0

sử dụng nó phải trả lời câu hỏi cũ ** đã được trả lời **? –

1

ByTheWay đừng quên để cho phép mod viết lại, trong apache trên ubuntu

sudo a2enmod rewrite 

và sau đó khởi động lại apache2

sudo /etc/init.d/apache2 restart 

chỉnh sửa: đó là một câu hỏi cũ mà đã giúp tôi nhưng tôi mất giờ kiểm tra tệp apache2.conf của tôi ở một bên và tệp .htaccess ở phía bên kia và vẫn không có ánh sáng.

0

Để viết lại tất cả các yêu cầu để /index.php, bạn có thể sử dụng:

RewriteEngine on 


RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule ^(.+)$ /index.php?url=$1 [NC,L] 

Các RewriteCondition RewriteCond %{REQUEST_URI} !^/index.php$ là quan trọng vì nó không bao gồm các điểm đến viết lại chúng tôi đang viết lại để và ngăn ngừa lỗi vòng lặp vô hạn.

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