2016-12-05 21 views
1

我在.htaccess文件中添加了一些规则以添加一些规则。其中的一个规则被替换特殊字符,如下面的示例中,跳过给定的文件类型替换.htaccess中URL的特殊字符

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)û(.*)$ /path/$1u$2 [L,R=301] 
RewriteRule ^(.*)\s(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)&(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)_(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)%(.*)$ /path/$1-$2 [L,R=301] 

我想这个规则不适用,如果请求的URL是有.js文件,名为.css或其他任何给定的扩展。

我尝试了几个解决方案,但仍然没有运气。以下是一些类似问题中建议的代码,

RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] 

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] 

感谢有没有人能帮忙?

这是一个很重要的一点,从维克勒马辛

记住,每个的RewriteCond条件仅适用于立即 以下重写规则。这意味着如果你有一堆规则,你必须复制条件。如果你真的不想因为某种原因做 ,你可以在所有 您的规则一开始就用一个否定

回答

1

您需要添加其他重写条件排除与特定的要求文件名称。

RewriteCond %{REQUEST_URI} !\.(js|css)$

上述条件将验证为特定的文件类型,并使其FASLE。

完整的代码将是

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !\.(js|css)$ 
RewriteRule ^(.*)û(.*)$ /path/$1u$2 [L,R=301] 
RewriteRule ^(.*)\s(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)&(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)_(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)%(.*)$ /path/$1-$2 [L,R=301] 

您可以使用在线工具,如http://htaccess.mwl.be/的调试。

+0

谢谢,测试工具是非常有用的。 – DSEJ

1

试试这个

RewriteCond %{REQUEST_FILENAME} !-f 
 
RewriteCond %{REQUEST_FILENAME} !-d 
 

 
RewriteCond %{REQUEST_URI} !\.(?:css|js)$ [NC] 
 
RewriteRule ^(.*)û(.*)$ /path/$1u$2 [L,R=301] 
 
RewriteRule ^(.*)\s(.*)$ /path/$1-$2 [L,R=301] 
 
RewriteRule ^(.*)&(.*)$ /path/$1-$2 [L,R=301] 
 
RewriteRule ^(.*)_(.*)$ /path/$1-$2 [L,R=301] 
 
RewriteRule ^(.*)%(.*)$ /path/$1-$2 [L,R=301]

记住,

每个的RewriteCond条件仅适用于紧随其后的重写规则。这意味着如果你有一堆规则,你必须重复条件。如果你真的不想这样做,因为某些原因,你可以在你的所有规则

+0

有帮助!谢谢 – DSEJ

1

试试这个一开始就用一个否定,

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RedirectMatch (.*)\.js$ %{HTTP_HOST}/$1.js 
RedirectMatch (.*)\.css$ %{HTTP_HOST}/$1.css 
RewriteRule ^(.*)û(.*)$ /path/$1u$2 [L,R=301] 
RewriteRule ^(.*)\s(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)&(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)_(.*)$ /path/$1-$2 [L,R=301] 
RewriteRule ^(.*)%(.*)$ /path/$1-$2 [L,R=301]