两个目录上的RewriteRule

时间:2017-11-08 23:46:58

标签: php .htaccess mod-rewrite url-rewriting

我试图通过在网址前添加cms/来保持用户端页面和后端网页的分离。我的.htaccess文件看起来像这样。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [NC]
RewriteRule ^cms/(.*)$ cms/index.php?url=$1 [NC]

我的目录如下所示:

> Project
   > cms
      index.php
      cms_page1.php
      cms_page2.php
   > pages
      page1.php
      page2.php
      page3.php
.htaccess
index.php

在我的外index.php我通过网址参数pagesurl文件夹中添加了网页。这些将用于用户端页面。我这样做是因为在那个索引页面中我还有所有页面的样式和导航。我想对cms文件夹中的页面做同样的事情。

当我转到www.mysite.com/cms/时,它会转到cms目录中的索引页面。但是当我转到www.mysite.com/cms/cms_page1时,它会转到外部索引文件,该文件中的url参数为cms/cms_page1。但我想要它做的是:cms/index.php?url=cms_page1因此它会在cms目录中打开index.php,然后包含cms_page1页面。

1 个答案:

答案 0 :(得分:0)

我不确定为什么会这样。您应enable logging,以便了解如何重写网址。

我怀疑这与您的规则顺序有关,而且一旦某些规则匹配,您就不会停止。

试试这个:

RewriteRule ^cms/(.*)$ cms/index.php?url=$1 [L,NC]
RewriteRule ^(.*)$ index.php?url=$1 [NC]

添加L标记stops any other rules being applied