我有一个专用于本地服务器(.dev)的域,以及一个将http://folder.dev/subfolder/这样的请求redirect到/htdocs/folder/subfolder的.htaccess文件。 除了一个小问题之外,它工作的很好。 当我启用了目录列表时,我可以正确地访问所有的文件夹,子文件夹和文件,除非当我点击Parent Directory链接,例如,应该导致http://folder.dev ,但redirect到http://folder.dev/folder/ ,最后抛出404 not found 。 同样,如果Parent Directory链接到http://folder.dev/subfolder/ ,它链接到http://folder.dev/folder/subfolder/ 。 下面是我的.htaccess的样子:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !(/$|\.) RewriteRule (.*) %{REQUEST_URI}/ [R=301,L] RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9][-a-z0-9]+)\.dev\.?(:80)?$ [NC] RewriteCond %2 !^www|ftp|mail|pop3|localhost$ RewriteCond %{DOCUMENT_ROOT}/%2 -d RewriteRule ^(.*) %2/$1 [E=SUBDOMAIN:%2,L] RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN}]
除此之外,其他一切正常(例如文件中的相关链接等)
发生这种情况是因为,当Apache显示目录索引时,将根据虚拟主机和当前目录的DocumentRoot评估“父目录”链接。
我猜你使用/htdocs目录作为folder1.dev , folder2.dev和所有其他.dev域的文档根目录,并将.htaccess文件放在/htdocs/.htaccess 。
当您访问http://folder.dev/subfolder/ (文档根目录是/htdocs/ )时,您的.htaccess会显示/htdocs/folder/subfolder/ 。 从文档根目录到此目录的相对path是folder/subfolder 。 当Apache计算当前显示的目录的父目录链接时,需要使用http:// + folder.dev + dirname('folder/subfolder') ,当然也就是http://folder.dev/folder/ ,而不仅仅是你所期望的http://folder.dev/ 。
如果域名后面的第一个path元素等于子域名并redirect到root,那么可以检入.htaccess:
http://folder.dev/folder/ 。 http://folder.dev/ 。 但是如果你这样做,就不可能像/htdocs/folder/folder/那样访问path,其中第一个path元素的确和子域名一样。
鉴于此,你不能用.htaccess和mod_rewrite来解决这个问题。
另一个解