为什么我不能将url中的“index.html”redirect到一个php文件?

我陷入了一个大问题,但让我从一个部分开始。

我正在为此工作:

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 [NC,QSA,L] 

有任何想法吗?

我使用这个作为主要问题的一部分,客户希望我只对以下一个或所有条件进行一次redirect

  • www缺失(放在前面)
  • index.html在最后(删除它)
  • CAPS存在(转换为小写)

为了达到这个目的,我创build了一个能完成所有工作的php文件,我需要在上面的任一条件中调用它(php文件将会redirect)。

 <?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); ?> 

(回声线是为了testing目的,它们将被删除,稍后激活header()命令)

.htaccess文件中,我现在有以下内容(在“RewriteEngine On”和“Options + FollowSymlinks”之后:

  # 2014-07-16 RM: Exclude these files from rewriting RewriteRule \.(js|ico|gif|jpg|jpeg|png|css|pdf)$ - [NC,QSA,L] # 2014-07-16 RM: Check if the url starts with www RewriteCond %{HTTP_HOST} ^mydomain\.com [NC] RewriteRule ^(.*) main.redirect.php [QSA,L] # 2014-07-16 RM: Check if the url ends with index.html # RewriteCond %{SCRIPT_FILENAME} ^(.*)index\.html$ [NC] # RewriteRule ^(.*) main.redirect.php [QSA,L] RewriteRule ^(.*)index.html main.redirect.php [NC,QSA,L] # 2014-07-16 RM: Check if the url contains upper-case characters # RewriteRule [AZ] - [E=HASCAPS:TRUE,S=1] # RewriteRule ![AZ] - [E=HASCAPS:FALSE,S=1] # RewriteCond %{ENV:HASCAPS} TRUE # RewriteRule ^(.*) main.redirect.php [QSA,L] 

任何帮助,很高兴感激!

亲切的问候

勒内

编辑:

我将.htaccess部分剥离了几行,但即使在这种情况下,只有www检查按预期工作:

 RewriteCond %{HTTP_HOST} ^mydomain\.com [NC,OR] RewriteCond %{REQUEST_URI} ^(.*)/index\.html$ [NC,OR] RewriteCond %{REQUEST_URI} [AZ] RewriteRule ^(.*) main.redirect.php [QSA,L] 

我没有testing过这个,但是我发现的第一件事就是在你的RewriteRule代码行里面是这样的:

 RewriteRule ^(.*) main.redirect.php [QSA,L] 

你应该尝试在main.redirect.php之前添加一个斜杠,因为redirect规则的一部分应该是一个URL,所以它会变成:

 RewriteRule ^(.*) /main.redirect.php [QSA,L]