我正在尝试使用.htaccess中的代码从我的网址中删除.html扩展名(在线找到的代码)。
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
它不起作用。我发现一篇帖子说要用它来测试是否启用了mod-rewrite:/usr/local/apache/bin/httpd -D DUMP_MODULES | grep rewrite
它返回:
Syntax OK
rewrite_module (static)
错误日志中没有任何内容。如果重要的话,这是在具有WHM和cPanel的服务器上。我的其他.htaccess指令正在运行。
答案 0 :(得分:1)
您的代码与您要完成的代码完全相反。正确的代码是:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
答案 1 :(得分:1)
如果您请求现有的html文件,这些条件将阻止规则执行任何操作:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
因为他们说,如果请求的文件不存在而且不是目录......当你请求一个html文件时,它将失败-f
测试。所以规则什么都不做。
您希望与实际请求匹配:
RewriteCond %{THE_REQUEST} \ /([^.]+)\.html($|\ |\?)
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ /%1 [L,R=301]
这会将对现有HTML文件的请求重定向到相同的路径,但减去扩展名。然后你可以在内部重写它:
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ /$1.html [L]