在开发与实时服务器之间切换时不一致?

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_rewriteRewriteRule ^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.devhttp://test.dev,并且可以在开发和实时站点上使用完全相同的.htaccess


其他一些提示:

    始终使用和定义RewriteBase /,因为当您想在开头使用没有/ 的规则时,它会有所不同,就像您在RewriteRule ^example/$ example.php [L,NC] 中提到的那样

    根据您要使用的规则,您可能需要指定-MultiViews,所以我经常默认保持打开状态,如下所示:

    Options +FollowSymLinks -MultiViews
    
    正如您在我的virtualhost 设置中看到的那样,我在默认情况下将访问、错误和重写日志定义到日志文件夹中,并且使用有问题的域名,所以当我需要查看发生了什么时,我有一个简单的仅使用该域的清晰日志进行访问,而不是我在同一 virualhost 上运行的所有项目。

我想就是这样,你真的不需要那么大的virtualhost,这正是我使用它的方式,我不需要一直复制和粘贴它,因为我有自己的简单脚本要创建新的域并为我完成所有工作。

【讨论】:

感谢您的彻底回答!确实比我想象的要复杂。我将使用您的主机文件指向和虚拟主机设置,因此我不必每次将项目上传到主机时都更改 htaccess 文件。

以上是关于在开发与实时服务器之间切换时不一致?的主要内容,如果未能解决你的问题,请参考以下文章

Java开发之使用websocket实现web客户端与服务器之间的实时通讯

计算点之间的距离时不一致

iOS 通过单击按钮在解析服务器连接之间切换

在视频流之间切换

Spring数据访问和数据访问层与业务或服务层之间的交互

如何在着色器之间实时切换?