htaccess 用于本地测试和实时服务器

Posted

技术标签:

【中文标题】htaccess 用于本地测试和实时服务器【英文标题】:htaccess for local testing and live server 【发布时间】:2016-01-16 23:08:44 【问题描述】:

我想我已经接近我的最终解决方案了。 .htaccess 看起来像这样:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /myproject/development/
RewriteRule ^((?!index\.php)[^/]+)/?$ index.php?page=$1 [L]
RewriteRule ^((?!index\.php)[^/]+)/([A-Za-z0-9]+)/([0-9]+)/([0-9]+)/?$ index.php?page=$1&keyword=$2&zip=$3&range=$4 [L,R]

第一条规则我不需要 RewriteBase(对此有点惊讶),但如果我添加第二条规则并打开此 URL,我需要它:

//localhost/myproject/development/somepage/test/13245/50

否则页面将被打开,但当然没有样式表,然后可以找到 javascripts。

1.) 目标: 我想在不更改或添加 rewriteBase 的情况下使用第二个 rewriteRule。我需要在 .htaccess 中进行什么更改,这样我就可以在没有 rewriteBase 的情况下继续测试我的项目。

原因:正如我之前问过的,我想在本地和实时服务器上测试我的项目,而不会对项目配置进行太多更改。

2.) [R] 标志 如果我要求

//localhost/myproject/development/somepage/test/53229/2000

当然在地址线中我们有这个网址

//localhost/myproject/development/index.php?page=somepage&keyword=test&zip=12345&range=2000

为避免这种行为,我只需删除 R-Flag。但是后来找不到CSS和JS了。另外在这里,我正在寻找一个没有 rewritebase、basepath、虚拟主机等的解决方案。

这是我开始的地方: Rewrite rules for localhost AND live envoirement

【问题讨论】:

【参考方案1】:

从外观上看,您不希望第二个 RewriteRule 上的 R 标志。这会破坏您的“漂亮”网址的对象。

但是后来CSS和JS都找不到了。

因为您使用的是 CSS 和 JS 文件的相对路径。将路径更改为根相对路径(以斜杠开头),或使用页面的 head 部分中的 base 元素来指示所有相对 URL 都相对于的 URL:

<base href="http://www.example.com/page.html">

更多信息:https://developer.mozilla.org/en/docs/Web/HTML/Element/base


第一条规则我不需要 RewriteBase(对此有点惊讶)

第一条规则(内部重写)不需要RewriteBase,因为目录前缀(指向此 .htaccess 文件的文件系统路径)会自动添加回相对路径替换。

但是,对于外部重定向(即R 标志),目录前缀没有意义,因此您需要指定相对根目录(以斜杠开头)或绝对网址。或者指定适当的RewriteBase 指令,它会覆盖将为相对替换添加的 URL 路径(仅此而已)。

【讨论】:

以上是关于htaccess 用于本地测试和实时服务器的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

我的本地主机服务器上的隐藏目录(与 htaccess 相关)

本地主机上的 .htaccess 正常,网络服务器上出现 500 内部服务器错误

如何创建 .htaccess 来显示 SVG?

.htaccess for apache 2.2 不适用于 apache 2.4 vagrant 开发框