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

fed*_*o-t 1 apache .htaccess relative-path

将我在localhost中开发的站点移动到带有该.htaccess文件的托管服务器时,我总是遇到麻烦.特别是与文件的相对路径.这不难解决,但是很烦人.

例如:

  • 虽然ErrorDocument 404 /foo/404.php在托管中工作,但要在localhost中工作,我必须指定ErrorDocument 404 /projectroot/foo/404.php.

  • 使用时mod_rewrite,RewriteRule ^example/$ example.php [L,NC] 可以在localhost中工作,但是要在托管中工作我必须使用 RewriteRule ^example/$ /example.php [L,NC](注意文件名前面的斜杠).

可能是因为我在Windows上运行本地主机,我的主机是Linux,但我不认为这是问题.

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

Pri*_*rix 5

这可能看起来稍微复杂一些,但我会以下列方式解决您的问题.

  1. C:\Windows\System32\drivers\etc\hosts指向IP 127.0.0.1 的文件上创建一个dev域,这是本地主机IP.

    例如,对于给定项目,域名并不简单,test.dev因此hosts文件看起来像这样:

    # 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在定义该项目的文件夹的位置,我将c:\projects\test用于此示例.

  3. 现在在您的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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新启动服务器以激活更改,您不需要为hosts文件重新启动计算机,它应该在您保存后立即运行.

  5. 现在你可以使用http://www.test.dev或者http://test.dev你可以.htaccess在dev和live网站上使用相同的内容.


其他一些提示:

  1. 总是使用和定义RewriteBase /因为它可以产生差异,特别是当你想要使用规则而不是/一开始就像你提到的那样RewriteRule ^example/$ example.php [L,NC]

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

    Options +FollowSymLinks -MultiViews
    
    Run Code Online (Sandbox Code Playgroud)
  3. 正如您在我的virtualhost设置中所看到的,我默认情况下将访问,错误和重写日志定义到logs文件夹中,并使用相关的域名,因此当我需要查看正在进行的操作时,我可以使用清除日志轻松访问那个领域而不是我在同一个项目上运行的一大堆项目virualhost.

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