HOW TO:从.htaccess调用一个php文件,用于3种不同的条件

时间:2014-07-16 16:50:48

标签: php apache .htaccess mod-rewrite

我需要在.htaccess文件中检查三个条件,并且 - 如果它们中的任何一个适用 - 一次性重写url。 要重写网址,我创建了一个php文件:

<?php
$sURL = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
echo '$sURL = ' . $sURL . '<br />';
$sURL = strtolower($sURL);
if (substr($sURL, 0, 4) != 'www.') {
    $sURL = 'www.' . $sURL;
}
if (substr($sURL, -10) == 'index.html') {
    $sURL = substr($sURL, 0, -10);
}
echo 'Location: http://' . $sURL;
#header('Location: http://' . $sURL, true, 301);
?>

(echo用于测试目的,它们将被移除并且header()行一旦被激活就被激活)。 这个文件的输出是正确的,我用不同的url检查了它。

我现在的问题是如何正确定义在.htaccess文件中调用此文件的条件。 条件是:

  • 缺少www。
  • 尾随“index.html”(必须删除)
  • CAPS(必须转换为小写)

这就是我现在在.htaccess中所拥有的:

    RewriteRule \.(js|ico|gif|jpg|jpeg|png|css|pdf)$ - [NC,QSA,L]

#    RewriteRule ([A-Z] - [E=HASCAPS:TRUE,S=1]
#    RewriteRule ![A-Z] - [E=HASCAPS:FALSE,S=1]
#    RewriteCond %{ENV:HASCAPS} TRUE
    RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^(.*)index\.html$ [NC]
    RewriteRule ^(.*) main.redirect.php [QSA,L]

我让它在第一个和第二个条件下工作,没有注释行,在两个RewriteCond行上都有OR,但在我把HASCAPS部分放入后,即使我评论了HASCAPS部分,这也不会再有效。

我现在已经工作了几个小时,但我找不到什么问题。 任何帮助,甚至是正确方向的提示,都很高兴得到赞赏!

亲切的问候

编辑:

我现在正在逐步完成它(意味着它自己的每个部分),我正在讨论为什么这样做:

RewriteRule ^(.*)index.html $1 [R=301,L]

虽然没有:

RewriteCond %{REQUEST_FILENAME} index\.html [NC]
RewriteRule ^(.*) main.redirect.php [QSA,L]

这个也行不通:

RewriteRule ^(.*)index.html main.redirect.php [L]

有什么想法吗?

0 个答案:

没有答案