apache - .htaccess 在 firefox 中检查 index.php 时会生成一个 pre 标记
问题描述
构建一个简约的 MVC,我需要一个 (.htaccess) 用于路由目的。我正在使用 apache 和虚拟端口。
index.php 是可见的,但一个前置标记(不是 html 源代码的一部分)及其空白使页面向下移动,就好像顶部有 250 像素的边距一样。
出于某种原因,(.htaccess) 的使用将 html 代码包装在 pre 标记内,结果导致头部内容移动到正文区域并在每行 meta/title/link 标记之间添加空白。
观察:
删除 (.htaccess) 会使 index.php 的结果恢复正常,并且从浏览器中看不到预标记(查看页面源代码),页面从浏览器顶部开始,因为它应该表现。
我的 index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="application/content/css/main.css">
</head>
<body>
<div class="wrapper">
<div class="top_banner">tb</div>
<div class="content">c</div>
<div class="navigation">n</div>
<div class="bottom_bar">bb</div>
</div>
</body>
</html>
我的 .htaccess 文件
RewriteEngine On
RewriteRule \.(css|js|png|jpg|gif)$ - [L]
RewriteRule ^([^/]+)/? index.php?url=$1 [L,QSA]
DirectoryIndex index.php
# Attempts to solve the problem with pre-tag.
#AddDefaultCharset UTF-8
#AddType text/html;charset=utf-8 html
#AddType text/plain;charset=iso-8859-1 txt
#AddType text/plain;charset=utf-8 text
我的 apache 文件(000-default-conf):
<VirtualHost *:100>
DocumentRoot /var/www/mvc
</VirtualHost>
<Directory /var/www/mvc/versions/>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
浏览器中的结果html(查看页面源):
<pre>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="application/content/css/main.css">
</head>
<body>
<div class="wrapper">
<div class="top_banner">tb</div>
<div class="content">c</div>
<div class="navigation">n</div>
<div class="bottom_bar">bb</div>
</div>
</body>
</html>
Firefox 检查器 HTML 代码
<html lang="en"><head></head><body><pre>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="application/content/css/main.css">
<div class="wrapper">
<div class="top_banner">tb</div>
<div class="content">c</div>
<div class="navigation">n</div>
<div class="bottom_bar">bb</div>
</div>
</pre></body></html>
解决方案
在 RewriteRule 替换路径是相对的,所以 apache 尝试猜测,根据 Apache 文档:
mod_rewrite 通过检查路径的第一段是否存在于文件系统的根目录来尝试猜测您是否指定了文件系统路径或 URL 路径。
您应该阅读rewriteRule 描述,可能您在某处有一个添加 pre 标签的文件。
推荐阅读
- java - Spring data - 具有相同标识符的不同对象,即使对象相等
- python - Pygame 'pygame.Surface' 对象不可调用
- node.js - 将 8kHz mulaw 转换为 PCM 16kHz
- python - 为什么当我做子图时窗口正在切割我的桌子?
- python - PYTHON:带有本地文件夹文件调用的导入模块=错误
- javascript - 谷歌地图多个和重叠的复选框
- java - 在 Java 中的每个循环结束时等待?
- docker - 在 $PATH 中找不到 docker-compose up 错误可执行文件,试图了解 docker
- laravel - 使用 eloquent 在 laravel 的 foreach 循环中获取对象的最佳方法?
- javascript - 函数不改变变量的值