PreetityUrl:停止加载扩展名为.php的页面



我正在为我的项目使用漂亮的url,它运行得很好。

http://testurl.com/user/12345

我正在使用.htaccess进行重定向。

Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} s/user.php?id=([0-9]+)s [NC]
RewriteRule ^ user/%1? [R=301,L]
RewriteCond %{THE_REQUEST} s/user.php?id=([0-9]+)&name=([^&s]+)s [NC]
RewriteRule ^ user/%1/%2? [R=301,L]
RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [L]
RewriteRule ^user/([0-9]+)/([^/]+)$ user.php?id=$1&name=$2 [L]

今天,我发现如果我像这样更改浏览器中的链接http://testurl.com/user.php,那么页面也在加载。如果有人直接试图访问,我想显示错误消息(Alert)

最好的方法是在没有id查询字符串的user.php中添加错误或重定向。

但您也可以添加(在RewriteBase /之后):

RewriteCond %{THE_REQUEST} s/user.phps [NC]
RewriteRule ^ - [F]

您还可以通过代码重组来解决问题。我在我的一个项目中做到了这一点,而且效果很好。

1.当你创建一个漂亮的URL时,将相应的文件移到另一个目录中

因此,在本例中,URL example.com/user.php?id=123在外部可见。现在,您需要一个漂亮的URL,例如example.com/user/123

在文件级别上,在您使用之前

- user.php

我建议你把它移到另一个目录,在那里所有的脚本都可以通过漂亮的URL访问:

- rewrites/
    |- user.php

2.从外部为旧URL创建到新URL的重定向

和你上面做的一样。

RewriteCond %{THE_REQUEST} s/user.php?id=([0-9]+)s [NC]
RewriteRule ^ user/%1? [R=301,L]
RewriteCond %{THE_REQUEST} s/user.php?id=([0-9]+)&name=([^&s]+)s [NC]
RewriteRule ^ user/%1/%2? [R=301,L]

3.在内部重写新的、漂亮的URL以移动脚本

和上面一样,只是添加了目录名rewrites

RewriteRule ^user/([0-9]+)/?$ rewrites/user.php?id=$1 [L]
RewriteRule ^user/([0-9]+)/([^/]+)$ rewrites/user.php?id=$1&name=$2 [L]

4.example.com/user.php现在以404失败

因为/user.php在文件系统中已经不存在了,所以如果在没有params的情况下调用,它会自动失败,并显示404。

5.福利

这种方法听起来可能是免费的额外工作,但在我看来,这些好处使它更有价值:

  1. 您不需要额外的.htaccess规则来处理错误
  2. 你得到了更好的代码组织
  3. 您可以通过漂亮的URL更好地了解已经可以访问的内容

最新更新