如何解决此.htaccess冲突?

时间:2015-06-17 01:12:41

标签: apache .htaccess mod-rewrite clean-urls

我有以下.htaccess规则,以便启用" clean" URL,即从文件名中删除.html扩展名:

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

它在网站上90%的目录中都能正常运行,除了其中包含index.html的目录。将这些目录链接为/ directory会导致以下错误:

  

禁止

     

您无权访问此服务器上的/directory/.html。

     

此外,尝试时遇到404 Not Found错误   使用ErrorDocument来处理请求。

不希望将这些目录链接为/ directory / index,因为带有" index"的URL在他们中间并不存在。

为了解决这个问题,我尝试将少数索引。 html 文件重命名为索引。 htm ,但在访问/目录时会出现相同的错误消息。

我对这部分感到特别困惑:

  

您无权访问此服务器上的/directory/.html。

为什么Apache认为我试图访问/directory/.html实际上我试图访问index.htm?

编辑: 根据巴拿马杰克的要求,我发布了

下面的整个.htaccess文件

原件:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

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

编辑#1:

Options -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

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

以下是apache错误日志中的一些条目 这些错误发生在我原来的.htaccess

client denied by server configuration: /home/user/public_html/ar/.html
File does not exist: /home/user/public_html/403.shtml
client denied by server configuration: /home/user/public_html/zh_TW/.html
File does not exist: /home/user/public_html/403.shtml

这些错误发生在编辑#1版本的htaccess:

File does not exist: /home/user/public_html/en/directory1, referer: http://example.com/en/directory1
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://example.com/en/directory1
File does not exist: /home/user/public_html/en/directory2, referer: http://example.com/
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://example.com/

1 个答案:

答案 0 :(得分:3)

以这种方式尝试你的规则。

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)/?$ $1.html [NC,L]

编辑:

Options -Indexes -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html [L,NC]