重定向URL中的特殊字符 - RewriteCond

时间:2015-10-12 13:44:23

标签: apache .htaccess mod-rewrite url-redirection

我需要从网址中删除特殊字符。如果存在这些特殊字符,我需要重定向到自定义错误页面。

htaccess文件中的规则是:

RewriteEngine on
    # Rewrite condition: The URL must redirect to a 403 error if the URL contains any special characters (!@$%^&*()_+|~`{}\[\]";'<>,.\/)
    RewriteCond %{THE_REQUEST} (.+_{}~\[\]\(\);,@\!\'\s&$\^)$ [NC]  # Characters like :"|<>*% cannot be disallowed?
    RewriteRule .* - [F,S,L]

    #Error page handeller
    ErrorDocument 400 /example/errordocs/error-code.php
    ErrorDocument 401 /example/errordocs/error-code.php
    ErrorDocument 403 /example/errordocs/error-code.php
    ErrorDocument 404 /example/errordocs/error-code.php
    ErrorDocument 500 /example/errordocs/error-code.php
    ErrorDocument 501 /example/errordocs/error-code.php
    ErrorDocument 502 /example/errordocs/error-code.php

我无法重定向以下特殊字符:*|"<>

如何编写上面的RewriteCond语句,以便请求重定向正确?截至目前,如果网址包含以下任何字符:*|"<>,则会将其重定向到预先加载Apache的默认错误页面。

1 个答案:

答案 0 :(得分:0)

您可以使用此规则阻止包含这些字符的所有网址:

RewriteCond %{THE_REQUEST} [_{}~\[\]();,@!'&$^<>"|*]|%3C|%3E|%22|%27
RewriteRule ^ - [F]

您可以在此字符类[...]中添加要阻止的更多字符。