构建一个最小化的MVC,我需要一个(.htaccess)用于路由。我使用的是apache和虚拟端口。
index.php 是可见的,但一个前标签(不是 html 源代码的一部分)和它的空白使得页面向下移动,就像上面有 250px 的空白一样。
由于某些原因,(.htaccess)的使用将html代码包裹在pre标签中,结果是头部内容移动到了正文区域,并且在每行metatitlelink标签之间增加了空白。
观察。
去掉(.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结果(view page souce)。
<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>
火狐浏览器的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路径。
你应该阅读 重写规则描述 可能你在某个地方有一个添加预标签的文件。