我需要两个条件规则。背景:
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¶ms=$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/