.htaccess无法正常工作

时间:2011-12-19 08:51:43

标签: .htaccess

我有.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文件

3 个答案:

答案 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。