【问题标题】:HTACCESS does not work when file with same name exists存在同名文件时 HTACCESS 不起作用
【发布时间】:2018-07-03 09:09:46
【问题描述】:

我有一个小问题,可能很容易解决,但我不知道如何解决。我有以下文件夹结构:

  • 主网站 -- 网站内容 -- 更多内容 --- 名为 cms 的子文件夹 --- index.php --- content.php(当然还有更多)

index.php 文件如下:

if(isset($_GET['page'])){
    require_once($_GET['page'].'.php');
}

子文件夹的 HTACCESS:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([\w-]+)/?$ index.php?page=$1 [QSA,L]

我试图在 index.php 中回显我的 $_GET['page'] 变量,每当我输入如下内容时:www.domain.com/cms/r 它给了我$_GET['page'] = r,这很好。但是,如果 $_GET 变量作为文件存在,我会收到 404 错误:www.domain.com/cms/content,它应该只显示我的 content.php 文件。

我到底做错了什么?感谢所有帮助:)

编辑:

似乎我可以让我的$_GET 工作,但它会忽略名称为$_GET 的文件是否存在。 www.domain.com/fluidify/content 不起作用,因为该文件夹中有一个名为 content.php 的文件,但是 www.domain.com/fluidify/testget 将遇到 testget 作为输出。

【问题讨论】:

  • 所以如果文件不存在你希望它传递给 index.php?
  • 不,我希望文件包含在 index.php 中,但是当文件存在时,它不起作用。我正在寻找是否可以在文件本身中找到任何问题,但这是数百个项目中唯一没有工作的项目......唯一的区别是这又是另一个服务器/托管
  • 问题出在其他地方...子目录不记得会话,我需要安全才能加载文件...为什么名称中的服务器不包含$_SESSION?我该如何解决这个问题?
  • 问题出在与此相关的其他地方,但必须以不同的方式解释...

标签: php .htaccess subdirectory


【解决方案1】:

如果您想拥有对 SEO 友好的 URL,那么您应该使用类似的东西 - 这会将所有内容重定向到您的路由脚本,无论该 URL 是否与现有文件匹配。

RewriteEngine On

RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

【讨论】:

  • 几乎!问题是我所有的样式表和图像都被重写了——至少,它们不再工作并且给我错误——。
  • 我稍微编辑了我的问题,以便更清楚地了解现在发生的事情。提前致谢!
  • 我真的很困惑——首先你说如果请求的文件存在,你无法到达index.php,现在你说即使请求的文件存在,你也可以到达index.php。那么你想要实现这两个中的哪一个呢?通常,您不会将静态资产与脚本保存在同一文件夹中。使用www.site.com/index.htmlwww.site.com/static/js/jquery.jswww.site.com/static/css/main.csswww.site.com/cms/seo-friendly-url 会更容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2015-06-04
  • 2013-12-16
  • 2015-03-28
相关资源
最近更新 更多