Tôi đang cố chuyển hướng tất cả các yêu cầu đến miền của mình tới một miền khác bằng cách sử dụng mod_rewrite trong khai báo VirtualHost Apache 2.2. Có một ngoại lệ cho điều này - tôi muốn tất cả các yêu cầu đến đường dẫn /audio
không phải là để được chuyển hướng.quy tắc mod_rewrite để chuyển hướng tất cả các yêu cầu ngoại trừ một đường dẫn cụ thể
Tôi đã viết một RewriteCond và RewriteRule để làm điều này nhưng nó không hoàn toàn đúng và tôi không thể hiểu tại sao. Cụm từ thông dụng có chứa dấu cộng âm cho chuỗi "/ âm thanh", nhưng vì một số lý do không phù hợp. Đây là định nghĩa:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
Nếu tôi thay đổi RewriteCond để:
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
(tức là đặt dấu gạch chéo bên ngoài của phần lookahead âm) sau đó nó hoạt động, nhưng nhược điểm của việc này là yêu cầu mydomain.net không có dấu gạch chéo sẽ không được chuyển hướng.
Có ai có thể chỉ ra những gì tôi đang làm sai?
(Lưu ý: các dấu ngoặc nhọn xung quanh lĩnh vực trong các bit RewriteRule trên đang được thêm vào bởi StackOverflow.com - họ không có trong mã thực tế)
Dưới đây là các quy tắc:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net
RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
cảm ơn @mercutio - mà làm cho cảm giác hoàn hảo nhưng nó vẫn dường như không làm việc.
Đây là những gì các bản ghi mod_rewrite nói khi tôi thực hiện một yêu cầu đến http://mydomain.net/audio/something.mp3:
(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to uri '/audio'
(2) rewrite '/audio' -> 'http://www.newdomain.net/'
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]
Kể từ khi REQUEST_URI không bắt đầu với /audio
tôi mong chờ các RewriteRule để được bỏ qua.
áp dụng mô hình để uri '/ âm thanh' Âm thanh như nó xử lý một mô hình khác nhau. Hoặc có lẽ logic chỉ là ngược lại bây giờ. Bạn có thể đăng toàn bộ quy tắc của mình không? – mercutio