1

好吧……我的标题有点夸张……

我的网站是用 PHP 构建的,我试图“require_once”的所有文件都没有被加载。我更改的唯一文件是我的 .htaccess 文件。我对 .htaccess 一无所知,而我所拥有的完全来自于网络搜索。怎么了?感谢您提前提供任何帮助。

RewriteEngine on

<Files 403.shtml>
order allow,deny
allow from all
</Files>
ReWriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
ReWriteRule !index.php index.php [L]

此外,如果我注释掉最后两行,我的网站运行良好。

4

2 回答 2

1

好吧,require_once与文件无关.htaccess:它是一个 PHP 指令,而不是 Apache 指令。您必须正确设置文件的include_path确保这些目录和文件是可访问的(即,对它们设置正确的权限)。

如果您显示从 failed 收到的错误消息require,那么就如何修复它为您提供具体建议会容易得多。

更新如果您需要将对 .php 文件的所有非 AJAX 请求重定向到index.php,您.htaccess应该是这样的:

RewriteEngine on

RewriteCond %{HTTP:x-requested-with} ^XMLHttpRequest$
RewriteRule . - [L]

RewriteCond %{REQUEST_FILENAME} !-d
ReWriteRule .php$ index.php

这基本上意味着以下内容:“所有 AJAX 请求 - 去你需要的东西,如果你不去某个目录并且以 .php 结尾,那么所有非 AJAX 请求 - 去 index.php 代替”。

如果不检查 .php(或一些类似的检查),您将重定向到index.php所有脚本加载程序;并且,除非您从某个外部 CDN 执行此操作,否则它不适用于您的情况。)

于 2012-09-13T21:50:39.537 回答
0

尝试将最后两行更改为:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

如果您希望您的 URL 看起来像这样(您可能会这样做):

http://yoursite.com/some/path/somewhere

然后将最后一行更改为:

RewriteRule ^([^/]*)(.*)$ index.php?first=$1&second=$2

如果那是您想要实现的目标,请确保如果您正在尝试:

http://yoursite.com/about

实际上没有一个名为 about 的文件夹,这一行:

RewriteCond %{REQUEST_FILENAME} !-d

检查名称为“about”的文件夹是否存在,如果存在,则页面不会重定向,文件也是如此,假设您转到:

http://yoursite.com/about.html

如果 about.html 确实存在,则页面不会重定向。

希望这是有道理的。

如果您需要更多信息,http://jrgns.net/content/redirect_request_to_index似乎相当简洁和有用。

于 2012-09-13T22:01:10.763 回答