我正在构建基于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/
)。
答案 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