Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 从替换.htaccess中URL的特殊字符中跳过给定的文件类型_Apache_.htaccess_Redirect_Url Rewriting_Rules - Fatal编程技术网

Apache 从替换.htaccess中URL的特殊字符中跳过给定的文件类型

Apache 从替换.htaccess中URL的特殊字符中跳过给定的文件类型,apache,.htaccess,redirect,url-rewriting,rules,Apache,.htaccess,Redirect,Url Rewriting,Rules,为了添加一些规则,我在.htaccess文件中添加了一些规则。其中一条规则是替换如下示例中的特殊字符 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/

为了添加一些规则,我在.htaccess文件中添加了一些规则。其中一条规则是替换如下示例中的特殊字符

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%{REQUEST\u URI}!\。(js|css)$

上述条件将针对特定文件类型进行验证,并使其生效

完整的代码将是

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]
您可以使用类似的在线工具进行调试。

试试这个

RewriteCond%{REQUEST\u FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写条件%{REQUEST\u URI}!\。(?:css | js)$[NC]
重写规则^(.*)ā(.*)$/path/$1u$2[L,R=301]
重写规则^(.*)s(.*)$/path/$1-$2[L,R=301]
重写规则^(.*)和(.*)$/path/$1-$2[L,R=301]
重写规则^(.*)(.*)$/path/$1-$2[L,R=301]
重写规则^(.*)%(.*)$/path/$1-$2[L,R=301]
试试这个

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]

谢谢,这个测试工具非常有用。非常有用!谢谢