2011-11-05 212 views
0

我想键入以下URL到我的浏览器:Apache的URL重写 - 隐藏/的public_html /在URL路径

localhost/mydomain/about.php 

并有阿帕奇重定向到实际的文件位置:

localhost/mydomain/public_html/about.php 

我写了下面的.htaccess文件:

RewriteEngine On 
RewriteRule ^(.+)$ public_html/$1 

我完全不熟悉Apache和我对reg expr的理解会议是非常基本的 - 但我认为这意味着“采取任何路径后的域名,并坚持public_html /前面”。但是,结果是500内部服务器错误。

我错过了什么?

非常感谢! -David

回答

1

这是因为只指定^(.+)$规则将使重写保持无限循环。

about.php>的public_html/about.php>的public_html /的public_html/about.php> ...

速战速决是RewriteRule ^([^/]*)$ public/$1。或者你可能有兴趣与重写规则的LAST改性剂/标志:

RewriteRule ^public/(.*)$ public/$1 [L] 
RewriteRule ^(.*)$ public/$1 

万一你想知道调试rewrite_module的方式,可以设置在httpd.conf LogLevel DEBUG,那么你就可以检查在Apache的错误日志。

+0

谢谢 - 我做了你建议的修改:'RewriteRule ^([^ /] *)$ public_html/$ 1 [L]'现在页面加载,但css和所有jpg图片都没有通过。我把它们放在public_html目录中的css和img目录中。我再次被Apache困扰,重写规则是递归地应用于HTTP请求的jpeg和CSS资源,导致它们失败?即使我添加了[L]标志?谢谢! – dmoench

+0

我已将[L]标志尝试添加到我的答案中。请参阅上面编辑的答案。谢谢! –

+0

非常感谢! – dmoench