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 相关)