2016-12-05 49 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]