htaccess rewriterule挑战

时间:2017-09-10 08:11:35

标签: apache .htaccess mod-rewrite

我正在构建基于MVC的CMS。

我正在尝试按以下方式路由所有网址:

  • site.com/admin/...> admin.php?url=...
  • site.com/member/...> member.php?url=...
  • site.com/...> index.php?url=...

前两个没问题

Options -MultiViews
RewriteEngine On
RewriteBase /cms/public_html/

RewriteCond %{REQuEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^admin/(.*)$ admin.php?url=$1 [QSA,L]
RewriteRule ^member/(.*)$ member.php?url=$1 [QSA,L]

但是当我想添加第三个时,那就是我被卡住的地方。我试过了

RewriteRule (.+)$ index.php?url=$1 [QSA,L]

然而,这会“禁用”前两个规则 然后我试了一下:

RewriteRule !^admin(.+)$ index.php?url=$1 [QSA,L]

这适用于管理部分,也显示索引,但不是在URL中解析的URL的其余部分。

我怎样才能让它发挥作用? 我还应该能够添加更多站点部分(例如site.com/gallery/)。

1 个答案:

答案 0 :(得分:1)

另一个RewriteCond怎么样?

请注意,您需要为每个RewriteCond列出一组RewriteRule,因为它们仅适用一次。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ admin.php?url=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^member/(.*)$ member.php?url=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/admin(/|$)
RewriteCond %{REQUEST_URI} !^/member(/|$)
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

最后一组演示:http://htaccess.mwl.be?share=e7bf5c48-3332-56c1-a83b-d828b3c043a4