在开发与实时服务器之间切换时不一致?
Posted
技术标签:
【中文标题】在开发与实时服务器之间切换时不一致?【英文标题】:Inconsistency when switching between development to live server? 【发布时间】:2013-09-22 15:39:37 【问题描述】:将我在 localhost 中开发的站点移动到带有.htaccess
文件的托管服务器时,我总是遇到麻烦。特别是文件的相对路径。不难修复,但很麻烦。
例如:
而 ErrorDocument 404 /foo/404.php
在
托管,要让它在 localhost 中工作,我必须指定 ErrorDocument
404 /projectroot/foo/404.php
。
使用mod_rewrite
、RewriteRule ^example/$ example.php [L,NC]
时
在本地主机中工作,但要在主机中工作,我必须使用
RewriteRule ^example/$ /example.php [L,NC]
(注意文件名前的斜线)。
可能是因为我在 Windows 上运行 localhost,而我的主机在 Linux 上,但我认为这不是问题。
所以我的问题是,在本地或远程服务器上工作时,如何确保文件的路径正确? .htaccess 文件的“工作目录”是什么?
【问题讨论】:
【参考方案1】:这可能看起来比看起来要复杂一些,但我会通过以下方式解决您的问题。
在 C:\Windows\System32\drivers\etc\hosts
文件上创建一个开发域,指向 IP 127.0.0.1,即 localhost IP。
域名并不重要,只是您可以轻松用于给定项目的名称,例如test.dev
,因此主机文件如下所示:
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.1 test.dev
127.0.0.1 www.test.dev
现在定义该项目的文件夹位置,我将在此示例中使用c:\projects\test
。
现在在您的网络服务器上为您刚刚创建的域创建一个新的virtualhost
,这是我使用的virtualhost
示例:
<VirtualHost *:80>
ServerAdmin root@localhost
DocumentRoot "C:/projects/test"
ServerName test.dev
ServerAlias www.test.dev
ErrorLog "C:/projects/logs/test.dev_error_log"
CustomLog "C:/projects/logs/test.dev_access_log" common
RewriteLog "C:/projects/logs/test.dev_rewrite_log"
RewriteLogLevel 9
ScriptAlias /cgi-bin/ "C:/projects/test/cgi-bin/"
<Directory "C:/projects/test">
Options -Indexes FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory "C:/projects/test/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
重启服务器以激活更改,hosts文件无需重启计算机,保存后立即生效。
现在您可以使用http://www.test.dev
或http://test.dev
,并且可以在开发和实时站点上使用完全相同的.htaccess
。
其他一些提示:
始终使用和定义RewriteBase /
,因为当您想在开头使用没有/
的规则时,它会有所不同,就像您在RewriteRule ^example/$ example.php [L,NC]
中提到的那样
根据您要使用的规则,您可能需要指定-MultiViews
,所以我经常默认保持打开状态,如下所示:
Options +FollowSymLinks -MultiViews
正如您在我的virtualhost
设置中看到的那样,我在默认情况下将访问、错误和重写日志定义到日志文件夹中,并且使用有问题的域名,所以当我需要查看发生了什么时,我有一个简单的仅使用该域的清晰日志进行访问,而不是我在同一 virualhost
上运行的所有项目。
我想就是这样,你真的不需要那么大的virtualhost
,这正是我使用它的方式,我不需要一直复制和粘贴它,因为我有自己的简单脚本要创建新的域并为我完成所有工作。
【讨论】:
感谢您的彻底回答!确实比我想象的要复杂。我将使用您的主机文件指向和虚拟主机设置,因此我不必每次将项目上传到主机时都更改htaccess
文件。以上是关于在开发与实时服务器之间切换时不一致?的主要内容,如果未能解决你的问题,请参考以下文章