Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache将所有文件和文件夹重定向到index.php,现有文件和文件夹除外_Php_Apache_.htaccess - Fatal编程技术网

Apache将所有文件和文件夹重定向到index.php,现有文件和文件夹除外

Apache将所有文件和文件夹重定向到index.php,现有文件和文件夹除外,php,apache,.htaccess,Php,Apache,.htaccess,我有index.php,它通过$\u服务器['REQUEST\u URI']变量读取完整路径。我的任务是当用户输入:www.domain/resource/777重定向到index.php,路径为/resource/777,并解析$\u服务器['REQUEST\u URI'],以执行一些逻辑。但我也有真实的文件和文件夹,如: css/theme.css assets/assets.js resource/locale.js 当我尝试此配置时: RewriteEngine On Rewrite

我有index.php,它通过
$\u服务器['REQUEST\u URI']
变量读取完整路径。我的任务是当用户输入:
www.domain/resource/777
重定向到
index.php
,路径为
/resource/777
,并解析
$\u服务器['REQUEST\u URI']
,以执行一些逻辑。但我也有真实的文件和文件夹,如:

  • css/theme.css
  • assets/assets.js
  • resource/locale.js
当我尝试此配置时:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [L]

客户端无法获取所有css和etc文件。如何在Apache中编写正确的规则以实现此目的?

您可以在htaccess文件中设置错误文档,以便使用index.php,然后请求一个不存在的文件:

ErrorDocument 404 /index.php

你的规矩很好。css/js/image的问题在于,您使用的是相对路径来包含它们

您可以将其添加到页面HTML的
部分下方:

<base href="/" />

目前,只有这一点对我有所帮助:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/src/
RewriteCond %{REQUEST_URI} !^/assets/
RewriteCond %{REQUEST_URI} !^/resource/
RewriteCond %{REQUEST_URI} !^/data.json
RewriteRule ^(.*)$ /index.php [L]

如果您使用的是Apache 2.2.16或更高版本,则可以用一条指令完全替换重写规则:

FallbackResource /index.php

基本上,如果请求导致错误404,则将使用回退资源uri来处理请求,从而正确填充
$\u服务器['request\u uri']
变量。

根据
请求_FILENAME
仅计算文件的完整本地文件系统路径(如果该路径已由服务器确定)

简而言之,这意味着如果该条件位于
.htaccess
文件内或httpd.conf中的
节内,则该条件将起作用,但如果该条件位于
文件内,则该条件将不起作用。在后一种情况下,您可以简单地将其包装在
标记中以使其正常工作

<VirtualHost *:80>
     # ... some other config ...
    <Directory /path/to/your/site>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ /index.php [L]
    </Directory>
</VirtualHost>

# ... 其他一些配置。。。
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$/index.php[L]

如果可能,请告诉complete config好吗?@Yoldar Zi您的评论应该告诉我什么?:)我的意思是把它放在重写*规则的末尾?嗯,这个配置通常对我有用。你能提供更多的信息吗。是否有一些css文件可以工作,但其他文件不能?或者所有的css文件都不起作用。配置文件是在.htaccess文件中还是在httpd.conf中?我在所有文件中都找不到404。在httpd.conf中进行配置。实例:谢谢你的页面链接。当我向您发送一个.js文件请求时,响应头显示您的web服务器是nginx/1.8.0。RewriteCond等是Apache配置,而不是nginx。您正在运行哪个web服务器?Nginx位于Apache之上。Nginx只是将代理传递到apache 88端口。我不是一个期望,但不是上面所说的将所有请求文件重定向到
index.php
index.php
的规则。php既不是
css
也不是
js
文件??不起作用。问题是我有404。真实示例:您的
http://lib.c.nis.edu.kz/assets/css/style.css
正在抛出404。这个
css
文件的正确URL是什么?这是主要问题!这些文件不存在。重写引擎正在执行用户无法获取这些文件的操作。如果我删除所有重写*用户可以获得这些文件。但是index.php不能通过$_SERVER['REQUEST\u URI']获取“/resource/4”,现在我可以获取文件,但是index.php不起作用:我得到了404个错误,您使用的是
SERVER:nginx/1.8.0
而不是Apache,因此这些htaccess规则不起作用。这非常有效。我推荐这个。
<VirtualHost *:80>
     # ... some other config ...
    <Directory /path/to/your/site>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ /index.php [L]
    </Directory>
</VirtualHost>