2012-07-02 88 views
0

我遇到的问题是,第一个URL的作品,第二个不。重定向循环由于htaccess文件

http://www.example.com/podcasts
http://www.example.com/podcast

他们都是HTML文件,因此增加的.html到第二个会使其工作。只有当html扩展被剥离(这是我想要发生的)重定向问题出现时。

我认为问题在于“podcast”既是一个文件夹,也是一个html文件。换句话说,有一个名为“podcast”的文件夹,还有一个名为podcast.html的文件,其扩展名被自动删除(这是我的意图)。

那么我该如何解决这个重定向问题?我希望这个文件夹和html仍然具有相同的名称和html扩展名,以及现在的HTML扩展名。

这是我的.htaccess文件的副本(编辑:添加l标志)

RewriteEngine On 
RewriteBase/

#removing trailing slash 

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

#non www to www 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#shtml 

AddType text/html .html 
AddHandler server-parsed .html 

#html 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

#index redirect 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://example.com/ [R=301,L] 

很肯定的是,重写规则涉及%{} REQUEST_FILENAME -f导致了问题!该循环不会发生404错误。

想法?

+0

您提供的两个网址几乎都是相同的,只是第一个网址末尾有一个附加的“s”。这是一个错字吗? – brezanac

+0

什么是输入网址,以及您将被重定向到的网址是什么? (请参阅Chrome/Firebug中的Net inspector) –

+0

@holodoc不,这不是一个错字。想法是“播客”既是一个文件夹也是一个html文件,所以它不起作用,而“播客”只是一个html文件,因此它没有重定向问题。 – Jeremy

回答

1

请尝试将其置于HTML部分下。

RewriteCond %{REQUEST_FILENAME} !-d 

-f标志将防止文件在规则中被考虑,但是这将排除目录。

+0

试过了,但没有帮助... – Jeremy

+0

将RewriteCond添加到尾部斜线部分。这可能会干扰,因为服务器试图将目录名称转换为目录路径(这意味着它添加了斜线,然后删除它,然后添加它,然后再次删除它)。 – Will

+0

它工作。谢谢你的帮助。除了...它没有显示podcast.html页面,它显示了该文件夹的原始索引... – Jeremy