.htaccess所有目录都给403 Forbidden

时间:2016-05-02 21:48:23

标签: php apache .htaccess

我在我的多语种网站上使用.htaccess对一些优秀的搜索引擎优化进行了一些网址修改。

默认情况下,所有文件夹都受403 Forbidden限制,但我想在两个路径上设置例外。 /de/en。是的,这些路径适用于多种语言,当我有以下页面时:

www.mywebsite.com/en/page

它工作正常,但当我尝试使用以下链接返回主页时:

www.mywebsite.com/en

它显示403被禁止。

这是我的完整代码:

RewriteEngine on

#remove .php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

#redirect lang
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L]


RewriteCond %{REQUEST_URI} !/en

在最后一行,您可以看到我尝试允许访问/en,但它不起作用。

如何允许访问这些路径:/en/de

修改

经过大量的搜索,我发现在Drupal上制作的同一台服务器上的主网站,它有自己的.htaccess文件,这就是为什么它在新网站(自定义cms)上显示403禁止的原因里面有一个单独的文件但是当我从主网站上删除.htaccess作为测试时,现在我在新网站上输入www.mywebsite.com/en/时显示404未找到。

如果我进入,那就不会发生 www.mywebsite.com/en

它只是重定向到索引页面。

经过仔细检查后,我可以看到我网站上的语言切换器会自动更改语言,因此,如果页面为/team,则其行为类似于/en/team,并且在首页上的行为类似{{1} }},而不是/en/

EDIT2

我已经按照w3dk的回答,但它仍然显示相同的错误。 这是我正在尝试的完整代码:

/en

此行RewriteEngine on #remove .php #RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L] RewriteRule ^([^\.]+)/?$ $1/index #redirect lang RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] 打破了语言切换器功能。例如,RewriteRule ^([^\.]+)/?$ $1/index不会更改为德语内容。现在我已经评论过这条线,“因为它不能正常工作。

我也在发布语言切换器的代码:

/de/team

如果我进入此页面

<?php
$currentURL = basename($_SERVER['REQUEST_URI']);
?>
        <ul class="language-switcher">
            <li><a href="/de/<?php echo $currentURL; ?>">DE</a></li>
            <li><a href="/en/<?php echo $currentURL; ?>">EN</a></li>
        </ul>   

然后单击德语版本的语言切换器,它成功显示德语内容,URL如下:

www.mywebsite.com/de/team

但如果我转到包含此网址的首页:

www.mywebsite.com/en/team

然后点击德语版本的语言切换器,URL就像这样,它显示403或404页面:

www.mywebsite.com

1 个答案:

答案 0 :(得分:2)

  

我希望/en加载索引页/en/index

尝试在第一条规则之后添加以下

RewriteRule ^([^\.]+)/?$ $1/index

然后应该最终将最终重写请求重写为index.php?lang=en的规则再次捕获。

或者,尝试以下方法:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)/?$ index.php?lang=$1 [L]