Apache将所有文件和文件夹重定向到index.php,现有文件和文件夹除外
我有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
$\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>