两个 mod 重写规则

Posted

技术标签:

【中文标题】两个 mod 重写规则【英文标题】:Two mod-rewrite rules 【发布时间】:2010-11-02 20:12:29 【问题描述】:

我需要两个条件规则。背景:

http://www.domain.com/.htaccess http://www.domain.com/index.php http://www.domain.com/admin/index.php

我有两个重写规则:

根: 重写引擎开启 重写条件 %QUERY_STRING ^(.*)$ 重写规则 ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L] 重写条件 %QUERY_STRING ^(.*)$ 重写规则 ^([^/]+)/ $1.php?%1 [L] 行政: 重写引擎开启 RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^([a-z]+?)/([a-z]+?)/(.*)$ index.php?model=$1&view=$2&params=$3 [L,NS]

我需要以某种方式让根级别的一个 .htaccess 文件同时使用这两个规则,但 ADMIN 规则仅适用于 url @987654321@ 并且 ROOT 规则适用于 @987654322@

提前谢谢你,我已经花了一整天的时间来尝试这样做,当一个工作时另一个给我一个“未找到”页面错误。

克里斯

【问题讨论】:

重复***.com/questions/992054/subfolders-and-mod-rewrite jitter:那你能回答我的问题吗?如果没有建设性,为什么要发表评论? 【参考方案1】:
RewriteCond %REQUEST_URI !^/admin/
RewriteCond %QUERY_STRING (.*)
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %REQUEST_URI !^/admin/
RewriteCond %QUERY_STRING (.*)
RewriteRule ^([^/]+)/ $1.php?%1 [L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^admin/([a-z]+?)/([a-z]+?)/(.*)$ /admin/index.php?model=$1&view=$2&params=$3 [L,NS]

【讨论】:

您可能想要添加 cmets 或解释您的条件的段落。 混乱:感谢您的快速回复。不过好像没用……?我什至尝试改变一些东西,但仍然没有运气:(【参考方案2】:

我会用这个:

RewriteEngine On

# /admin/ rule
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^admin/([a-z]+)/([a-z]+)/(.*)$ admin/index.php?model=$1&view=$2&params=$3 [L,NS]
RewriteRule ^admin/ - [L]

# other rules
RewriteRule ^(.*/)([^/]+)/([^/]+)$ $1?$2=$3 [L,QSA]
RewriteRule ^([^/]+)/ $1.php [L,QSA]

QSA 标志(查询字符串追加)替换了RewriteCond %QUERY_STRING (.*) 指令。

【讨论】:

以上是关于两个 mod 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

apache mod_rewrite - 重写规则

mod_rewrite 到 nginx 重写规则

mod的运算规则是啥?

使用 mod_rewrite 重写用户代理规则

htaccess 条件重写规则与 mod_GeoIP

PHP Pretty URLs 两个 mod_rewrite 规则的组合?