【问题标题】:How to redirect to error page when requesting URL that ends with '.php'?请求以“.php”结尾的 URL 时如何重定向到错误页面?
【发布时间】:2016-07-30 06:47:16
【问题描述】:

我创建了一个.htaccess 文件,以使用户能够请求没有php 扩展名的页面,并在请求以'.php' 结尾的URL 时强制重定向到自定义错误页面。像这样:

mysite.com/home -> 将提供home.php

mysite.com/home.php -> 将提供自定义 403 禁止

我的问题是当我请求 mysite.com/home.php 时,home.php 被提供,没有任何错误。

这是我的.htaccess 文件:

RewriteEngine On
RewriteBase /

# Exit the rule chain when showing error pages
RewriteRule ^error/403.php$ - [L]
RewriteRule ^error/404.php$ - [L]

# Append '.php' to every request 
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]

# Show 404 error page when original request ends with '.php'
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php/.*$ - [L,R=404]

# Custom error 
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404

【问题讨论】:

  • RewriteRule \.php/.*$ 可能应该只是 RewriteRule \.php$,但我猜你最终会得到所有 404ed 的东西,但试试看。 (如果您使用的是 Apache 2.4,请尝试将 END 放在 L 中)
  • 谢谢。将其更改为 RewriteRule \.php$ 效果很好,需要进行一些修改。

标签: php apache .htaccess redirect mod-rewrite


【解决方案1】:

将此添加到您的 .htaccess 文件中

<Files ~ "\.php$">
  Order allow,deny
  Deny from all
</Files>

【讨论】:

    【解决方案2】:

    我将\.php/.*$ 更改为\.php.*$\.php$ 现在可以正常工作了。

    在这种情况下,我选择了第一个,因为 API 支持像 mysite.com/api/data1/data2/(通过访问 api.php)。

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      相关资源
      最近更新 更多