【问题标题】:File and Directory Named the Same PHP文件和目录同名 PHP
【发布时间】:2014-02-02 04:06:54
【问题描述】:

我的网站目前有这两件作品。

localhost/FTS/papers - 这是一个 php 文件
localhost/FTS/papers/ - 这是一个目录

我想要做的是让它在我加载时:

localhost/FTS/papers -or-
localhost/FTS/papers/ -or-
localhost/FTS/papers.php

我希望他们都去论文档案。

现在它访问的是目录而不是文件,这不是我想要的。

【问题讨论】:

    标签: php regex .htaccess mod-rewrite


    【解决方案1】:

    我认为当您与论文目录或论文文档交谈时,PHP(我也是)相当混乱。

    如果可能的话,最好的方法是将论文文档的名称更改为 paper_doc 以确保您在正确的位置。 (这很容易出错)。

    PHP 的 is_dir 功能可以轻松检查您是在与文件还是目录对话:

    var_dump(is_dir('a_file.txt'));
    var_dump(is_dir('bogus_dir/abc'));
    

    或者使用 is_file:

    var_dump(is_file('a_file.txt'));
    var_dump(is_file('bogus_dir/abc'));
    

    【讨论】:

      【解决方案2】:

      将此规则放在您的 DOCUMENT_ROOT/.htaccess 文件中:

      RewriteEngine On
      RewriteBase /FTS/
      
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{DOCUMENT_ROOT}/FTS/$1.php -f
      RewriteRule ^(.+?)/?$ $1.php [L]
      

      【讨论】:

      • 我正在将此确切代码放入我的 /var/www/FTS/.htaccess 文件中,但它不适用于 localhost/FTS/papers...
      • 这似乎奏效了,但仍然存在一些小问题。看起来没有任何 css 通过,它只是以纯 html 显示网站。它还不断将链接更改为“papers/”,而不仅仅是“papers”。我只是为了能够去掉尾部的斜线。
      • 对于 css/js,最好在 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以http:// 或斜杠/ 开头,否则您可以尝试在页面标题中添加:<base href="/" />
      • 另外,如果/papers/ 是一个真实目录,那么mod_dir 模块会添加斜杠而不是上述规则。最好不要从目录中去掉斜线。
      • 这是我目前拥有的 css 绝对路径,但它仍然无法正常工作。有什么建议吗?
      【解决方案3】:

      您可以做的一件事是使用此规则将 htaccess 文件放在 papers 目录中:

      RewriteEngine On
      RewriteRule ^$ /FTS/papers.php [L]
      

      并允许 mod_dir 将/FTS/papers 重定向到/FTS/papers/

      【讨论】:

      • 这是有效的......有点。它不再显示我拥有的任何图形,并且它仍然显示链接 localhost/FTS/papers/ 当我希望它从末尾删除斜杠并仅显示 paper.php 页面
      • @FreeTheStudents 您的图片是否相对链接?您需要将它们设为绝对链接或在页面标题中添加相对基础(例如<base href="/" />)。至于试图让/FTS/papers 在没有重定向的情况下加载 php 文件,则需要关闭 mod_dir,这样即使您有索引文件,任何人都可以查看您的目录内容,这意味着关闭自动索引: Options -Indexes 并关闭 mod_dir DirectorySlash Off
      • link rel="stylesheet" href="/var/www/FTS/screen.css"> 这是我目前的 css 绝对路径,但它仍然无法正常工作。有什么建议吗?
      • @FreeTheStudents 您希望它相对于 URL 路径而不是文件路径是绝对的。例如,如果在http://localhost/FTS/screen.css可以访问css文件,那么您需要将其设为/FTS/screen.css
      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多