将我在本地主机上开发的网站移植到我的托pipe服务器上,使用.htaccess
文件时,我总是遇到麻烦。 特别是与文件的相对path。 这不难解决,但是相当麻烦。
例如:
鉴于ErrorDocument 404 /foo/404.php
在主机工作,因为它在本地主机工作,我不得不指定ErrorDocument 404 /projectroot/foo/404.php
。
当使用mod_rewrite
, RewriteRule ^example/$ example.php [L,NC]
在localhost中工作,但为了在宿主中工作,我必须使用RewriteRule ^example/$ /example.php [L,NC]
在文件名之前)。
这可能是因为我在Windows上运行本地主机,我的主机是在Linux上,但我不认为这是问题。
所以我的问题是,在本地或在远程服务器上工作时,如何确保文件path正确? 什么是.htaccess文件的“工作目录”?
这看起来可能稍微复杂一点,但我会按照以下方式解决你的问题。
在C:\Windows\System32\drivers\etc\hosts
文件上创建一个指向IP 127.0.0.1(本地主机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
现在定义该项目文件夹的位置,我将在这个例子中使用c:\projects\test
。
现在,在您的Web服务器上为您刚刚创建的域创建一个新的virtualhost
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>
重新启动您的服务器以激活更改,您不需要重新启动主机文件的计算机,一旦您保存它应该立即工作。
现在你可以使用http://www.test.dev
或http://test.dev
,你可以在dev和live网站上使用相同的.htaccess
。
其他一些提示:
总是使用和定义RewriteBase /
因为它可以有所作为,当你想要使用没有/
在开始时的规则,就像你提到的RewriteRule ^example/$ example.php [L,NC]
根据您要使用的规则,您可能需要指定-MultiViews
所以我经常默认保持开启状态,如下所示:
Options +FollowSymLinks -MultiViews
virtualhost
设置,我定义的访问,错误和重写日志到默认的日志文件夹和有问题的域名,所以当我需要看看是怎么回事我有一个简单的访问清除日志只有这个域名,而不是我在同一个virualhost
上运行的所有项目。 我想这是关于它的,你并不需要那么庞大的virtualhost
,这就是我如何使用它,而不是像我需要一直复制和粘贴它,因为我有我自己的简单脚本来创建新的域,并做所有为我工作。