Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 在开发与live server之间切换时不一致?_Apache_.htaccess_Relative Path - Fatal编程技术网

Apache 在开发与live server之间切换时不一致?

Apache 在开发与live server之间切换时不一致?,apache,.htaccess,relative-path,Apache,.htaccess,Relative Path,在将我在localhost中开发的站点和该文件一起移动到宿主服务器时,我总是遇到麻烦。特别是文件的相对路径。这不难解决,但很麻烦 例如: 而errordocument404/foo/404.php在 托管,为了在localhost中工作,我必须指定ErrorDocument 404/projectroot/foo/404.php 使用时,RewriteRule^example/$example.php[L,NC] 在localhost中工作,但要使其在宿主中工作,我必须使用 重写规则^exam

在将我在localhost中开发的站点和该文件一起移动到宿主服务器时,我总是遇到麻烦。特别是文件的相对路径。这不难解决,但很麻烦

例如:

  • errordocument404/foo/404.php
    在 托管,为了在localhost中工作,我必须指定
    ErrorDocument
    404/projectroot/foo/404.php

  • 使用时,
    RewriteRule^example/$example.php[L,NC]
    在localhost中工作,但要使其在宿主中工作,我必须使用
    重写规则^example/$/example.php[L,NC]
    (注意文件名前的斜杠)

这可能是因为我在Windows上运行localhost,而我的主机在Linux上,但我认为这不是问题所在


所以我的问题是,在本地或远程服务器上工作时,如何确保文件的路径正确?.htaccess文件的“工作目录”是什么?

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

  • C:\Windows\System32\drivers\etc\hosts
    文件上创建一个dev域,指向IP 127.0.0.1,它是本地主机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
    
    Options +FollowSymLinks -MultiViews
    
  • 现在定义该项目的文件夹所在的位置,我将使用
    c:\projects\test
    作为示例

  • 现在,在web服务器上为刚刚创建的域创建一个新的
    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>
    
  • 正如您在我的
    virtualhost
    设置中看到的,我定义了访问权限,默认情况下,错误并将日志重写到logs文件夹中,并使用相关域名,这样当我需要查看正在发生的事情时,我可以轻松访问该域的清除日志,而不是在同一
    虚拟主机上运行的所有项目

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

    这看起来可能会稍微复杂一些,但我会用下面的方法解决你的问题

  • C:\Windows\System32\drivers\etc\hosts
    文件上创建一个dev域,指向IP 127.0.0.1,它是本地主机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
    
    Options +FollowSymLinks -MultiViews
    
  • 现在定义该项目的文件夹所在的位置,我将使用
    c:\projects\test
    作为示例

  • 现在,在web服务器上为刚刚创建的域创建一个新的
    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>
    
  • 正如您在我的
    virtualhost
    设置中看到的,我定义了访问权限,默认情况下,错误并将日志重写到logs文件夹中,并使用相关域名,这样当我需要查看正在发生的事情时,我可以轻松访问该域的清除日志,而不是在同一
    虚拟主机上运行的所有项目

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

    谢谢你的全面回答!这确实比我想象的更复杂。我将使用您的主机文件指向和virtualhost设置,这样我就不必每次将项目上载到主机时都更改
    htaccess
    文件。感谢您的详细回答!这确实比我想象的更复杂。我将使用您的主机文件指向和virtualhost设置,这样我就不必每次将项目上载到主机时都更改
    htaccess
    文件。