多个mod_rewrite冲突

时间:2014-11-04 16:14:38

标签: apache .htaccess mod-rewrite redirect

我试图在.htaccess文件中获得3个mod_rewrites来协同工作。

我想要以下内容:

school.mysite.com => mysite.com/index.php?inst=school

mysite.com/french => mysite.com/subject.php?sub=french

school.mysite.com/french => mysite.com/subject.php?inst=school&sub=french

我以前有过前两个工作,但在我的生活中无法让第三个工作。 一个星期后,我放弃了并在这里寻求帮助,幸运的是,anubhava很快给了我解决方案:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^([a-zA-Z_]+)\.mysite\.com$ [NC]
RewriteRule ^([a-zA-Z_]+)/?$ index.php?inst=%1&sub=$1 [L,QSA]

自己的代码完美无缺,但是我想把月亮放在一根棍子上也希望其他两个人仍然在旁边工作......他们不会这样做。

从那时起,我一直在不间断地工作,并且可以使用以下代码让主题与之一起工作

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/([a-zA-Z_]+)/?$
RewriteRule ^(.*)$ subject.php?sub=%1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^([a-zA-Z_]+)\.mysite\.com$ [NC]
RewriteRule ^([a-zA-Z_]+)/?$ index.php?inst=%1&sub=$1 [L,QSA]

但我无法让子域工作,我的尝试是......

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^([a-zA-Z_]+)\.mysite\.com$ [NC]
RewriteCond %{REQUEST_URI} ^$
RewriteRule ^(.*)$ index.php?institute=%1 [L] 

我想通过检查URI是否为空它可能会触发它。 而不是把我的头靠在墙上一个星期,我想我会在天结束时问:) 如果它有任何区别,它们按子域检查,主题检查和组合检查的顺序放在.htaccess文件中。

我认为我的逻辑在某处有缺陷,请帮忙。

问候

1 个答案:

答案 0 :(得分:1)

如果按以下方式订购,它应该有效:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^([a-zA-Z_]+)\.mysite\.com$ [NC]
RewriteRule ^([a-zA-Z_]+)/?$ subject.php?inst=%1&sub=$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^([a-zA-Z_]+)\.mysite\.com$ [NC]
RewriteRule ^/?$ index.php?inst=%1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^([a-zA-Z_]+)/$ subject.php?sub=$1 [L,QSA]

第一个匹配子域 AND 一个请求uri,第二个匹配一个空白uri的子域,第三个子域没有子域的uri。前两个的顺序很重要,如果你想要的话,第三个可能是第一个。