2012-04-15 59 views
1

我正在處理基於某些條件在我的.htaccess文件中應用URL重寫規則,但由於我使用Apache .htacces進行URL重寫的知識水平接近零,因此已經觸發了。我的使用案例URL基於特定條件的重寫規則

我的WordPress應用程序中使用的插件很少,以及那些用於某些CSS和JavaScript的插件,我希望這些URL應該來自CDN服務器,由於某些問題我無法使用簡單重寫將重寫整個應用程序的URL,因爲這件事正在破壞我的應用程序功能。

http://www.mydomain.com/wp-content/plugins/pluginA/abc.css 
http://www.mydomain.com/wp-content/plugins/pluginA/abc.js 

我想,當CSS和JS都是從這個插件(插件A)或任何其他插件我想重寫其URL,URL應該得到改寫爲

http://www.cdn.mydomain.com/wp-content/plugins/pluginA/abc.css 
http://www.cdn.mydomain.com/wp-content/plugins/pluginA/abc.js 

我不知道如何做這樣的條件基於URL重寫,任何建議將真正有用的

編輯 這是根

我目前的.htaccess文件
<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /wordpress/ 
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /wordpress/index.php [L] 
</IfModule> 

我已經wp-content文件夾下創建一個新的.htaccess文件按Michael建議用以下條目

RewriteEngine On 
<IfModule mod_rewrite.c> 
RewriteBase /wordpress/ 
RewriteCond %{REQUEST_FILENAME} ^.+\.(css|js)$ 
RewriteRule wp-content/plugins/(nivo-slider-light|Usernoise|lightbox-plus|wp-content-slideshow|content-slide)/(.+)$ http:/cdn.cloudfront.net/wp-content/plugins/$1/$2 [L,R=302,QSA] 
</IfModule> 

,但似乎這不是上述插件所有的CSS和JS文件正在努力爲仍在來自本地主機的URL,而不是來自我的CDN服務器。我甚至在我的根目錄的.htaccess文件中將這些行註釋掉了。

RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 

但是這也沒有對URL進行任何更改。

回答

1

這可以放在根目錄內的.htaccess中。您要重寫的任何插件都可以放置在由|分隔的()之內。

RewriteEngine On 
# Rewrite pluginA plugin X, and pluginZ to the CDN. Add add more with | 
RewriteRule wp-content/plugins/(pluginA|pluginX|pluginZ)/(.+)$ http:/www.cdn.mydomain.com/wp-content/plugins/$1/$2 [L,R=301,QSA] 

注意:上面的內容重寫了所有的插件文件。如果只應的CSS & js文件,使用

RewriteCond %{REQUEST_FILENAME} \.(css|js)$ 
RewriteRule wp-content/plugins/(pluginA|pluginX|pluginZ)/(.+)$ http:/www.cdn.mydomain.com/wp-content/plugins/$1/$2 [L,R=301,QSA] 
+0

我想這是我的本地機器上,似乎它不是working.Is那裏像'HTTP網址任何關係://本地主機/ WordPress的/ WP- content/plugins/nivo-slider-light/nivo-slider.css?ver = 3.3.1'這個部分是'?ver = 3.3.1',每個URL都由插件提供。 – 2012-04-15 18:17:11

+0

@ user702325用'[L,R = 301,QSA]添加'QSA''將現有查詢字符串附加到請求上。 – 2012-04-15 18:32:18

+0

我也嘗試過這一個,但這也不work.i在''.htaccess'文件位於根'RewriteCond%{QUERY_STRING}(\ <|%3C)。*腳本。*(\> | %3E)[NC,OR] RewriteCond%{QUERY_STRING} GLOBALS(= | \ [| \%[0-9A-Z] {0,2})[OR] RewriteCond%{QUERY_STRING} _REQUEST(= | \ [| \%[0-9A-Z] {0,2})'不確定這與否有關係 – 2012-04-15 18:37:29