ModRewrite中的条件是否可能?

时间:2011-06-17 11:15:04

标签: .htaccess mod-rewrite

我有一段简单的ModRewrite,如果它不是现有的文件或目录,它会将所有内容传递给index.php。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php/$1 [L]

现在我想在域包含某些字符串时添加异常,但我不知道如何添加它。我想添加以下内容。

RewriteCond %{HTTP_HOST} ^(aanmelding|keyclamps|probouw)
RewriteRule ^(.*)$ /project.php/$1 [L]

更新,我找到了部分解决方案 如果我这样说:

RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# If not an old project
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw)

# forward it to index.php
RewriteRule ^(.*)$ /index.php/$1 [L]

# Else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# forward it to project.php
RewriteRule ^(.*)$ /project.php/$1 [L]

它有效,但有一个错误。因为index.php存在,当像http://probouw.localhost/这样调用普通域时,条件的第二部分仍然是index.php而不是project.php

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

对于任何可能需要此功能的人来说,解决方案是:

RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# If not an old project
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw)

# forward it to index.php
RewriteRule ^(.*)$ /index.php/$1 [L]

# Else 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} =/

# forward it to project.php
RewriteRule ^(.*)$ /project.php/$1 [L]

答案 1 :(得分:0)

也许使用OR会有所帮助(NC = NotCase敏感的方式)?

RewriteCond %{HTTP_HOST} ^.*aanmelding.*$ [NC,OR]
RewriteCond %{HTTP_HOST} ^.*keyclamps.*$ [NC,OR]
RewriteCond %{HTTP_HOST} ^.*probouw.*$ [NC]

答案 2 :(得分:0)

参考您的部分解决方案,如果您更改最后一部分,这是否有效?

# forward it to project.php
RewriteRule ^/?$ /project.php [L]
RewriteRule ^(.*?)$ /project.php/$1 [L]