【问题标题】:htaccess redirect any urls ending in .php to indexhtaccess 将任何以 .php 结尾的 url 重定向到索引
【发布时间】:2011-06-04 22:03:30
【问题描述】:

到目前为止,我的 .htaccess 设置如下:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]

我的 index.php 从 /pages 加载文件,例如。 index.php?page=home 将从 pages/home.php 加载页面内容

但是 - 如果有人去 pages/home.php 页面加载时没有标题等,这是不可取的。我可以添加什么来重定向任何以 .php 结尾的 URL 以将用户带到主页?

谢谢

【问题讨论】:

  • Deny From All 放在 pages 目录下的 .htacess 里会立刻解决你的问题
  • 我宁愿害怕在这段代码中包含注入...
  • 拒绝所有人 - 成功了。当你说包括注射时 - 你能更具体吗?谢谢
  • 如果您只是在做include $_GET['page'],则可能包含一些恶意脚本。至少使用basename() 函数清理您的文件名

标签: php .htaccess mod-rewrite redirect


【解决方案1】:

^(.*)\.php$ 的单独 RewriteRule(没有文件存在条件)应该可以工作。但是为什么人们试图直接访问 .php 呢?如果没有充分的理由,目录中的拒绝可能是更好的选择。

(并且,作为@Col. Shrapnel cmets,请注意包含注入。我希望您能够很好地过滤您的页面名称。)

编辑:包含注入:考虑一下如果有人给你一个有趣的页面名称会发生​​什么,例如page=http://foo.com/exploit,你的脚本会运行它吗? page=/etc/passwdpage=/../../../etc/passwd 怎么样,你会打印出密码文件吗? page=`mysqldump …`,你能给我一份你的数据库吗?

【讨论】:

  • 我已经完全拒绝了 - 解决了问题。谢谢
  • @include 注入编辑:不用担心,我已经知道了——使用 basename() 和 file_exists()。也没有sql注入的机会:)感谢您的帮助
【解决方案2】:

这应该将pages/anything.php 重定向到index.php?page=anything

RewriteCond %{REQUEST_URI} \.php$
RewriteRule ^(.*/)?([^/]*)\.php$ /index.php?page=$2 [R=301,L]

请注意上面的安全提示。包括注入是不好的..

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多