【问题标题】: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 文件的“工作目录”是什么?

【问题讨论】:

    标签: apache .htaccess relative-path


    【解决方案1】:

    这看起来可能比看起来要复杂一些,但我会通过以下方式解决您的问题。

    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
      
    2. 现在定义该项目的文件夹位置,我将在此示例中使用c:\projects\test

    3. 现在在您的网络服务器上为您刚刚创建的域创建一个新的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>
      
    4. 重启服务器以激活更改,hosts文件无需重启计算机,保存后立即生效。

    5. 现在您可以使用http://www.test.devhttp://test.dev,并且可以在开发和实时站点上使用完全相同的.htaccess


    其他一些提示:

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

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

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

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

    【讨论】:

    • 感谢您的彻底回答!确实比我想象的要复杂。我将使用您的主机文件指向和虚拟主机设置,因此我不必每次将项目上传到主机时都更改 htaccess 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2021-10-19
    • 2010-11-27
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多