.htaccess RewriteRule无法正常工作,<name> .php被加载而不是index.php?page = <name>

时间:2017-12-26 15:57:57

标签: php apache .htaccess redirect mod-rewrite

我们的网站具有以下文件结构:

/www
    /nl
        index.php
        contact.php
        ...
    /fr
        index.php
        contact.php
        ...
    /de
        index.php
        contact.php
        ...
    index.php
    .htaccess

index.php文件夹中的www文件是一个语言选择页面,该页面链接到index.phpnl和{{fr个文件1}}文件夹。后面的index.php页面构建网页并从de加载页面内容。

过去,网页的加载方式如下:

<page>.php

这会将http://www.ourdomain.com/nl/index.php?page=contact 的内容加载到网站结构中。

为了使网站更加SEO友好,我们将其更改为:

/nl/contact.php

这最多可达3级(http://www.ourdomain.com/nl/contact

/nl/nav-level1/nav-level2/nav-level3nlfr文件夹中的index.php文件有一个算法,301将旧页面网址重定向到访问该网站的用户的新网页网址来自旧网址。

de

根www目录中的.htaccess文件如下所示:

header( 'HTTP/1.1 301 Moved Permanently' );
header('location:' . $newurl);
exit;

这很好用,直到我将这个网站移到我们新托管服务提供商的服务器上。

现在,当我转到RewriteEngine On # RewriteBase wijzigen in / (online) RewriteBase / # PDF: redirect pdf file in wrong directory to root language directory (nl/fr/en) RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/([a-zA-Z0-9\-]+.pdf)/?$ $1/$3 [NC,L,R=301] # pages: redirect index.php in wrong directory to the correct language directory (nl/fr/en) RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/(index.php)/?$ $1/$3 [NC,L] # pages: convert SEO friendly url to index.php?page=<page> RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)*/([a-zA-Z0-9\-]+)/?$ $1/index.php?page=$3 [NC,L] 时,不会加载http://www.ourdomain.com/nl/contact,而是直接加载http://www.ourdomain.com/nl/index.php?page=contact。这意味着我可以看到页面的内容,但没有我们网站的其他结构和布局。

我通过

检查http://www.ourdomain.com/nl/contact.php文件是否有效
  • 将我的.htaccess内容放在http://htaccess.mwl.be/上的.htaccess测试人员中并测试我网站的网址:这会返回预期的网址
  • 在.htaccess文件中放置无效内容:这会按预期返回服务器错误
  • 将所有内容重定向到测试页:这会将所有网址重定向到测试文件。

然后我发现我可以通过在与php文件同名的语言文件夹(.htaccessnlfr)中创建文件夹来解决此问题。这使得seo友好的URL按预期加载页面,但不知何故,get变量仍然被添加到seo友好的URL中。

de

而不是/www /nl /contact /... index.php contact.php ... /fr /contact /... index.php contact.php ... /de /contact /... index.php contact.php ... index.php .htaccess 我总是被重定向到http://www.ourdomain.com/nl/contact

如果我转到http://www.ourdomain.com/nl/contact/?page=contact get变量未添加到网址。

我一直在努力寻找这个问题的几个小时,我不理解它。任何有价值的意见将不胜感激。

1 个答案:

答案 0 :(得分:0)

我刚刚找到了问题的答案。

显然,在新服务器上设置了MultiViews。因此,没有扩展名的文件名与包含扩展名的文件相匹配,导致http://example.com/nl/contact加载http://example.com/nl/contact.php