我需要在.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文件中调用此文件的条件。 条件是:
这就是我现在在.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]
有什么想法吗?