【问题标题】:multiple mod_rewrite clash多个 mod_rewrite 冲突
【发布时间】:2014-11-04 16:14:38
【问题描述】:

我正在尝试让 .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]

自己的代码完美无缺,但我希望月亮在棍子上也希望其他 2 仍然在它旁边工作......而他们没有。

从那时起,我一直在不停地研究它们,并且可以使用以下代码让主题与它一起工作

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 文件中的顺序是子域检查、主题检查,然后是组合检查。

我假设我的逻辑在某个地方有缺陷,请帮忙。

问候

【问题讨论】:

  • 如果你最终得到一个空白的inst 参数,这有关系吗?即inst=&school=french 可以吗?
  • 嗨,arco444,没关系,一些逻辑可以很容易地应用于页面来检查

标签: apache .htaccess mod-rewrite redirect


【解决方案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 的子域。前两个的顺序很重要,如果你愿意,第三个可以是第一个。

【讨论】:

  • 你好 arco444。仅子域对我仍然不起作用:(它不会创建查询字符串,$_GET 数组是完全空的。我自己尝试过(其他规则已注释掉)并且确实如此不工作
  • 当你删除RewriteCond %{REQUEST_FILENAME} !-d,它应该可以工作。
  • 抱歉之前的消息被截断了...感谢奥拉夫成功了!一切都很完美......我发现如果我删除复合主题和学校墙,它也几乎可以正常工作......因为当我使用复合规则时,它会将我发送到索引而不是主题页面,但正如你所说再次感谢 arco444 和 Olaf Dietsche,修复使其一切正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多