我有以下.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/
答案 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]