求助一个PHP程序伪静态规则问题?

作者站长头像
站长
· 阅读数 19

打开网址1:域名/article/359.html ,正常的内容页。打开网址2:域名//////article/359.html ,还是正常的内容页。

正常来说 应该是 404页面或者自动跳到只有一个 /开头的该页面。

APACHE规则如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) index.php?rewrite=$1 [L]
</IfModule>
<FilesMatch .(?i:htm|ini)$>
Order allow,deny
Deny from all
</FilesMatch>

NGINX规则如下:

if (!-e $request_filename) {
    rewrite ^/(.+) /index.php?rewrite=$1 last;
}

伪静态处理时:

$_GET['rewrite']
得到的内容是:article/359.html

请问如果修改规则?打开网址2,跳转到404错误或者301跳转到网址1

回复
1个回答
avatar
test
2024-06-27

Apache:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # 重定向多个斜杠到一个斜杠
    RewriteCond %{THE_REQUEST} \s//+
    RewriteRule ^ / [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.+) index.php?rewrite=$1 [L]
</IfModule>

<FilesMatch .(?i:htm|ini)$>
    Order allow,deny
    Deny from all
</FilesMatch>

NGINX:


server {
    # ... 其他配置

    if ($request_uri ~ "//") {
        return 404;
    }

    if (!-e $request_filename) {
        rewrite ^/(.+) /index.php?rewrite=$1 last;
    }
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容