.htaccess%重写规则崩溃服务器

时间:2018-02-18 17:06:05

标签: php regex .htaccess url-rewriting

我需要使用urlencode()函数,这会使网址包含'%'符号。

我当前的重写不允许这些字符,所以我需要更新它,我尝试过崩溃整个服务器。

示例网址/标记:<a href="/edit-portfolio/MQ%3D%3D">Test Link</a>

.htaccess(工作很好,直到我需要urlencode()

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?page=$1&c=$2 [NC,L]

.htaccess(崩溃网站)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z_-%]+)/([0-9a-zA-Z_-%]+)$ index.php?page=$1&c=$ [NC,L]

1 个答案:

答案 0 :(得分:2)

您应该在字符类中处理-,因为它可能会定义范围。只是为了确保一直逃脱它:

RewriteRule ^([0-9a-zA-Z_\-%]+)/([0-9a-zA-Z_\-%]+)$ index.php?page=$1&c=$ [NC,L]
                         ^                  ^

[_-%]此范围并非有效

或将其移至字符类的末尾:

RewriteRule ^([0-9a-zA-Z_%-]+)/([0-9a-zA-Z_%-]+)$ index.php?page=$1&c=$ [NC,L]

顺便说一下,所有人都可以缩短为:

RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&c=$2 [NC,L]
                                                   ^ You missed this one