2012-04-15 75 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