Preety Url:停止加载.php扩展名页面

时间:2016-03-24 07:15:24

标签: php .htaccess

我正在为我的项目使用漂亮的网址,它工作正常。

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,那么页面也在加载我想显示错误消息(提醒),如果有人直接尝试访问

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您也可以通过代码重组来解决您的问题。我在我的一个项目中做到了这一点,它运作良好。

1。创建漂亮的URL时,将相应的文件移动到另一个目录

因此,在这种情况下,您可以在外部看到网址example.com/user.php?id=123。现在,您需要一个漂亮的网址,例如example.com/user/123

在文件级别,在你有

之前
- user.php

我建议您将其移至另一个目录,其中所有脚本都只能通过漂亮的URL访问:

- rewrites/
    |- user.php

2。从外部

创建旧网址重定向到新网址

和你上面一样。

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在文件系统中不再存在,所以如果没有参数调用它会自动失败并显示404。

5。优点

这种方法可能听起来像是无用的额外工作,但这些是我认为值得的好处:

  1. 您不需要额外的.htaccess错误处理规则
  2. 您可以获得更好的代码组织
  3. 您可以更好地了解使用漂亮网址
  4. 可以访问的内容