2010-10-27 32 views
11

Làm cách nào tôi có thể tìm kiếm một cá thể cho một số phần mở rộng tập tin nhất định, chẳng hạn như. (Jpg | png | css | js | php), và nếu không có kết quả nào gửi nó đến index.php ? route = $ 1.rewriterule trong htaccess để khớp với một số phần mở rộng tập tin nhất định

Tôi muốn có thể cho phép khoảng thời gian cho tên người dùng tùy chỉnh.

Vì vậy, viết lại http://example.com/my.name để index.php đường = my.name

thiết lập hiện tại:

.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)$ index.php?route=$1 [QSA,L] 
</IfModule> 

gì hoạt động:?
http://example.com/userpage -> index.php ? route = userpage
http://example.com/userpage/photos -> index.php? route = userpage/photos
http://example.com/file.js ->http://example.com/file.js
http://example.com/css/file.css ->http://example.com/css/file.css

Những gì tôi cần phải làm việc ngoài trên:
http://example.com/my.name -> index.php đường = my.name

Trả lời

19

Thêm RewriteCond phụ để loại trừ các điều kiện bạn không muốn viết lại. Sử dụng ! trước biểu thức chính quy để cho biết rằng bất kỳ tệp nào khớp với sẽ bị lỗi. RewriteCond dưới đây là chưa được kiểm tra, nhưng nên cung cấp cho bạn một ý tưởng về những gì bạn cần:

RewriteCond %{REQUEST_URI} !\.(jpg|png|css|js|php)$ 
+0

Đã cố gắng điều này và nó có ý nghĩa, nhưng nó không hoạt động! – wdavis

+0

Kết hợp điều này với _allowing_ một dấu chấm trong tên/tuyến đường (do đó, thay thế '[^.]' Bằng '.' trong' RewriteRule' gốc từ câu hỏi của bạn). A.t.m, bạn mạnh mẽ không cho phép một dấu chấm ở đó, do đó, tất nhiên nó sẽ không hoạt động. – Wrikken

+0

Ah, bạn đúng là Wrikken. Sửa đổi các quy tắc và nó đến với nhau. Tôi thực sự đánh giá cao những người giúp đỡ – wdavis

5

Bạn đã cố gắng đảo ngược logic? Một cái gì đó như

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule \.(jpg|png|css|js)$ - [L] 

Điều này sẽ không ghi đè bất kỳ tệp nào có đuôi .jpg, .png, .css hoặc .js. Sau đó, thêm các quy tắc hiện có của bạn để các yêu cầu không phải tệp, không phải thư mục được định tuyến lại tới index.php.

+0

Cảm ơn cho đầu vào Harper, điều này đã giúp tôi có được nó giải quyết – wdavis

+0

chỉ cần nhớ rằng -f là khủng khiếp chậm trong môi trường tải cao như thế này yêu cầu quyền truy cập hệ thống tệp. checkin 'REQUEST_URI' nhanh hơn nhiều! –

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