我有.htaccess文件,其中包含以下代码。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L]
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]
我想要满足以下要求的.htaccess文件。 如果 1)url / admin然后转到admin文件夹并选择它的.htaccess文件 2)url / imagefactory然后转到imagefactory文件夹并选择它的文件index.php 3)url /然后选择根目录的index.php文件
答案 0 :(得分:1)
试试这个
RewriteEngine on
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]
RewriteRule ^admin/.$ - [PT]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1
答案 1 :(得分:0)
您应该将最后一条规则放在第一位置。此规则RewriteRule ^(.*)$ index.php?q=$1 [L]
将匹配任何内容,并且[L]属性表示在匹配时不会评估其他规则。如果您按照下面的顺序重新排序它应该可以工作。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]
RewriteRule ^(.*)$ index.php?q=$1
答案 2 :(得分:0)
按顺序读取.htaccess文件。 RewriteCond只适用于一条规则。
因此,您只需要:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA, L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/admin/(.*)$
RewriteRule ^(.*)$ index.php?q=$1 [QSA, L]
第二个块是一个catch all,如果它不是来自目录admin,则使用默认的root index.php。