如何在本地使用 XAMPP 设置 F3?

How to setup F3 with XAMPP locally?

我正在尝试 运行 本地的 Fat Free PHP 项目 XAMPP 来自 C:\xampp\htdocs\abc 我的问题是 none 我的 css、图像或链接工作。我添加了一个 .htaccess 文件:

RewriteEngine On
RewriteBase /abc/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /abc/index.php [L,QSA]

我的 index.php 加载但 css 的 none 加载图像似乎有所帮助。此外,当我单击任何链接时,我都会收到 404,并且 url 不会路由到我的 /abc 目录。

我已经尝试了无数的 RewriteRules 和 RewriteConds,但都没有成功。

此外,生产中一切正常,所以我不想更改结构。

如有任何帮助,将不胜感激。

您的路径似乎有问题。

根据您的评论,我假设您的资产和 link 是这样写的:

<link rel="stylesheet" href="/bootstrap.css" />
<img src="/mypic.png"/>
<a href="/what/ever.html">click</a>

那些 link 是 绝对(注意前导 /)。这意味着它们指向服务器根目录,所以:

  • bootstrap.css 解析为 myserver.tld/bootstrap.css
  • mypic.png 解析为 myserver.tld/mypic.png
  • 等等

他们在您的生产网站上工作可能是因为该项目托管在服务器根目录上。

但是在您的本地服务器上,所有内容都从 / 转移到 /abc/,这导致错误的 link 分辨率。所以你有两个解决方案:

解决方案 1

为您的所有 link 添加 BASE。如果您使用的是框架模板引擎,那将给出:

<link rel="stylesheet" href="{{ @BASE }}/bootstrap.css" />
<img src="{{ @BASE }}/mypic.png"/>
<a href="{{ @BASE }}/what/ever.html">click</a>

解决方案 2

通过在 <head> 部分中添加 <base> 标记,通知浏览器所有 link 都应该相对于 /abc/ 进行解析:

<base href="http://myserver.tld/abc/">

<base href="/abc/">

注意:结尾的斜杠很重要。整个字符串被视为所有 link 的前缀。

备注

这两个解决方案并非 100% 等效,因为第二个解决方案会影响锚点 link。实际上,<a href="#foo"> 指向:

  • 第一个解决方案的当前页面
  • 第二种解决方案的基础 URI(即 /abc/#foo

我的建议是创建一个 VirtualHost。它会影响其他 Apache 配置文件,但我假设您只想在本地重新创建环境(您有完全的自主权和自定义它的能力),因此不需要更改应用程序的代码。

在任何文本编辑器中打开 Windows C:\WINDOWS\system32\drivers\etc\hosts 文件,但具有管理员权限并添加以下行:

127.0.0.1   localcopy.tld

这将告诉系统该主机应由本地服务器处理。

现在找到您的 hhtpd-vhosts.conf(它应该在 C:\xampp\apache\conf\extra\ 目录中)。从

行中删除井号
NameVirtualHost *.80

并插入以下行:

<VirtualHost *:80>
  DocumentRoot C:/xampp/htdocs/abc
  ServerName localcopy.tld
</VirtualHost>

这将告诉 Apache 当请求处理 localcopy.tld 请求时,它应该在 C:/xampp/htdocs/abc 目录中找到文件。

最后您需要修改 Apache 主配置文件以允许虚拟主机。 在文本编辑器中打开主 Apache 配置文件 httpd.conf。该文件位于 C:\xampp\apache\conf\。向下滚动到末尾的 Supplemental configuration 部分,然后找到以下部分(大约第 500 行)。删除评论行的井号:

Include conf/extra/httpd-vhosts.conf

应该这样做。

更深入的解释is available here

所有这些都可以让您在 http://localcopy.tld 访问您的本地副本。

试试这个 .htaccess:

RewriteEngine On
RewriteBase /abc/

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule (.+\.(?:gif|png|jpe?g|css))$ /abc/ [NC,L]
RewriteRule .* /abc/index.php [L]