Apache URL重写-在URL路径中隐藏/public\u html/

Apache URL重写-在URL路径中隐藏/public\u html/,apache,url-rewriting,Apache,Url Rewriting,我想在我的浏览器中键入以下url: localhost/mydomain/about.php 并将apache重定向到实际文件位置: localhost/mydomain/public_html/about.php 我编写了以下.htaccess文件: RewriteEngine On RewriteRule ^(.+)$ public_html/$1 我对Apache完全不熟悉,我对reg表达式的理解非常基础,但我认为这意味着“在域名之后选择任何路径,并将public_html/放在它前

我想在我的浏览器中键入以下url:

localhost/mydomain/about.php
并将apache重定向到实际文件位置:

localhost/mydomain/public_html/about.php
我编写了以下.htaccess文件:

RewriteEngine On
RewriteRule ^(.+)$ public_html/$1
我对Apache完全不熟悉,我对reg表达式的理解非常基础,但我认为这意味着“在域名之后选择任何路径,并将public_html/放在它前面”。但是,结果是500内部服务器错误


我缺少什么?

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

about.php>public\u html/about.php>public\u html/public\u html/about.php>

一个快速解决方案是
RewriteRule^([^/]*)$public/$1
。或者您可能对重写规则的
LAST
修饰符/标志感兴趣:

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

如果您想知道调试重写模块的方法,可以在httpd.conf中设置
LogLevel DEBUG
,然后查看apache错误日志。

谢谢-我做了您建议的修改:
RewriteRule^([^/]*)$public\u html/$1[L]
,现在页面加载,但是css和所有jpg图片都没有通过。我把它们放在公共html目录中的css和img目录中。我再一次被Apache搞糊涂了,重写规则是否递归地应用于jpeg和CSS资源的HTTP请求,导致它们失败?即使我添加了[L]标志?谢谢我已将[L]标志添加到我的答案中。请参考上面编辑的答案。谢谢