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文件的"工作目录"?
这可能看起来稍微复杂一些,但我会以下列方式解决您的问题.
在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)现在定义该项目的文件夹的位置,我将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>
Run Code Online (Sandbox Code Playgroud)重新启动服务器以激活更改,您不需要为hosts文件重新启动计算机,它应该在您保存后立即运行.
现在你可以使用http://www.test.dev
或者http://test.dev
你可以.htaccess
在dev和live网站上使用相同的内容.
其他一些提示:
总是使用和定义RewriteBase /
因为它可以产生差异,特别是当你想要使用规则而不是/
一开始就像你提到的那样RewriteRule ^example/$ example.php [L,NC]
根据您要使用的规则,您可能需要指定,-MultiViews
所以我经常在默认情况下保持启用,如下所示:
Options +FollowSymLinks -MultiViews
Run Code Online (Sandbox Code Playgroud)virtualhost
设置中所看到的,我默认情况下将访问,错误和重写日志定义到logs文件夹中,并使用相关的域名,因此当我需要查看正在进行的操作时,我可以使用清除日志轻松访问那个领域而不是我在同一个项目上运行的一大堆项目virualhost
.我想这是关于它的,你真的不需要那么大virtualhost
我就是这样使用它而不是我需要一直复制和粘贴它,因为我有自己的简单脚本来创建新域并完成所有操作为我工作.