Htaccess重写规则导致禁止访问

时间:2017-12-03 12:07:11

标签: php apache .htaccess mod-rewrite

我试图像这样隐藏url中的子文件夹:

localhost / imo / public_html / public / ajuda.php localhost / imo / ajuda

如果文件存在,它运行良好,如果不是,我得到这样的禁止访问:

  

您无权访问   /imo/public_html/public/public_html/public/public_html...public/contacto.php.php.php.php.php.php.php.php.php.php   在这台服务器上。

这是我的htaccess文件:

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch

RewriteEngine On

RewriteRule ^$ public_html/public/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ public_html/public/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L,QSA,NC]

</IfModule>

我已经在stackoverflow上搜索了,似乎规则导致循环但是到目前为止提供的解决方案对我的情况不起作用。任何帮助都会非常苛刻。

谢谢。

更新 感谢@Matthijs Otterloo,这是工作的htaccess脚本:

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch

RewriteEngine On
RewriteRule ^$ public_html/public/

RewriteCond %{REQUEST_URI} !^/public_html/public
RewriteRule ^/?([^/]+)$ /public_html/public/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L,QSA,NC]

</IfModule>

1 个答案:

答案 0 :(得分:0)

.htaccess文件中尝试以下内容:

RewriteEngine On RewriteCond %{REQUEST_URI} !^/public_html/public RewriteRule ^/?([^/]+)$ /public_html/public/$1 [L]

最好的方法是设置propper虚拟主机,但这应该解决它。