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

Eld*_*dar 13 php apache .htaccess

我有index.php,它按$_SERVER[‘REQUEST_URI’]变量读取完整路径.我的任务是当用户输入:www.domain/resource/777重定向到index.php路径/resource/777并解析$_SERVER[‘REQUEST_URI’]以做一些逻辑.但我也有真实的文件和文件夹,如:

  • CSS/theme.css
  • 资产/ assets.js
  • 资源/ locale.js

当我尝试这个配置时:

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

客户端无法获取所有css和etc文件.如何在Apache中编写正确的规则来实现这个目标?

Sir*_*ius 14

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

FallbackResource /index.php
Run Code Online (Sandbox Code Playgroud)

请参阅https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

基本上,如果请求导致错误404,则回退资源uri将用于处理请求,正确填充$_SERVER[‘REQUEST_URI’]变量.


mar*_*ump 0

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

ErrorDocument 404 /index.php
Run Code Online (Sandbox Code Playgroud)