mod-rewrite - 两个 mod 重写规则

标签 mod-rewrite url-routing

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

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

我有两个重写规则:

ROOT:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1.php?%1 [L]

ADMIN:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+?)/([a-z]+?)/(.*)$ index.php?model=$1&view=$2¶ms=$3 [L,NS]

我需要以某种方式让根级别上只有一个 .htaccess 文件使用这两个规则,但 ADMIN 规则仅在 url <a href="http://www.domain.com/admin/foo/bar/something/else" rel="noreferrer noopener nofollow">http://www.domain.com/admin/foo/bar/something/else</a> 时适用ROOT 规则适用于 <a href="http://www.domain.com/foo/bar/something/else" rel="noreferrer noopener nofollow">http://www.domain.com/foo/bar/something/else</a> .

提前谢谢您,我花了一整天的时间来尝试执行此操作,当一个工作正常时,另一个给我一个“未找到”页面错误。

克里斯

最佳答案

我会用这个:

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-rewrite - 两个 mod 重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/993008/

相关文章:

php - 不存在的路由的后备路由

javascript - polymer 后退按钮不适用于哈希路由

google-app-engine - GAE : How to use unicode characters in url

apache - 多条件重写规则

.htaccess - .htaccess,带斜线或不带斜线

.htaccess 重定向循环由 http --> https 重写规则产生

php url路由

.htaccess - htaccess 正在工作,但不会替换 url

apache - 使 Apache 不监听某些域的端口 443

路由辅助函数的 http 动词