2009-05-16 18 views
8

Tôi muốn để có một URL như http://localhost/universe/networks/o2/o2_logo.gif và làm như sau:Sử dụng thay đổi% {REQUEST_URI} trong file RewriteCond tồn tại kiểm tra

 
If it begins with /universe/ 
Strip /universe/ from it to become /networks/o2/o2_logo.gif 
Check if this exists in %{DOCUMENT_ROOT}/networks/o2/o2_logo.gif 
If so, silently rewrite the request to this file. 

Nếu tôi sử dụng một quy tắc:

 
RewriteCond %{REQUEST_URI} ^/universe/ 
RewriteRule ^(.*)$ http://www.example.org/$1 [L] 

http://localhost/universe/networks/o2/o2_logo.gif được viết lại thành http://www.example.org/networks/o2/o2_logo.gif tuyệt vời, nhưng dường như tôi không thể sử dụng

Làm cách nào để tôi sử dụng 'thay đổi'% {REQUEST_URI} này wn như nói $ 1 hoặc một cái gì đó?

Trả lời

16

tôi đã không thể để có được quyền này hoàn toàn với .htaccess nhưng sử dụng các tập tin sau đây:

RewriteEngine On 

# Does the file exist in the content folder? 
RewriteCond %{REQUEST_URI} !^/content.* 
RewriteCond %{DOCUMENT_ROOT}/universe/%{REQUEST_URI} -f 

# File Exists 
RewriteRule^%{DOCUMENT_ROOT}/universe/%{REQUEST_URI} [L] 

# If the request is not a file, link or directory then send to index.php 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] # Item exists so don't rewrite 

# Nothing exists for the request so append a trailing/if needed 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule^%{REQUEST_URI}/ [R=301,L] 

RewriteRule ^.*$ index.php [NC,L] # Send off as-is to index.php 

Sau đó, tôi đi vào thư mục DOCUMENT_ROOT của tôi và đã làm như sau:

cd /var/www/journal 
ln -s journal/public universe 
cd /var/www/journal/public 
ln -s content/ universe 

Kết hợp với htaccess có nghĩa là mọi thứ đang hoạt động.

+0

Đây là một câu trả lời tuyệt vời. Tôi đã thử một số ý tưởng của những người khác và sau đó phát hiện ra điều này. Man ... htaccess là một địa ngục của một tập tin cấu hình ... – MikeMurko

1

Hãy thử quy tắc này:

RewriteCond %{DOCUMENT_ROOT}$1 -f 
RewriteRule ^universe/(.*) $1 [L] 
+0

Có vẻ như nó đang đi đúng hướng. .htaccess của tôi có chứa: # Mục nhập có tồn tại trong thư mục nội dung không? RewriteCond% {DOCUMENT_ROOT}/vũ trụ/công khai/nội dung/$ 1 -f RewriteRule^universe /(.*) http: // localhost: 81/exist/$ 1 [L] RewriteRule^universe /(.*) http: // localhost: 81/not_exists/$ 1 [L] Vẫn tạo ra 404 mặc dù khi tôi mong đợi nó theo một trong hai RewriteRules ít nhất? Tôi có thể bỏ lỡ điều gì để bỏ qua điều này? Nội dung nằm trong C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ universe \ public \ content – Alistair

+0

xin lỗi vì định dạng đó ... – Alistair

+0

Ồ, vì vậy bạn muốn chuyển nó qua máy chủ trong mạng nội bộ. Sau đó, bạn cần phải sử dụng một proxy. Chỉ cần thêm cờ P vào các quy tắc. – Gumbo

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