将带.php/.html后缀及带斜杠的页面重定向到无后缀WWW版本
解决方案:统一URL格式并移除PHP后缀,同时保留静态文件访问
我来帮你完善.htaccess配置,完美实现你想要的所有需求——既把各种非标准URL(带.php后缀、带尾部斜杠、不带www、HTTP协议)统一重定向到https://www.bm-translations.de/test这种标准格式,又不会影响图片、PDF这类静态文件的正常访问。
下面是完整的配置代码,你可以直接替换现有内容:
RewriteEngine On RewriteBase / # 1. 强制跳转到HTTPS + www前缀,一步到位避免多次重定向 RewriteCond %{SERVER_PORT} 80 [OR] RewriteCond %{HTTP_HOST} !^www\.bm-translations\.de$ RewriteRule ^(.*)$ https://www.bm-translations.de/$1 [L,R=301] # 2. 放行真实存在的静态文件(图片、PDF、CSS等),不执行后续重定向 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # 3. 将带.php后缀的URL重定向到无后缀版本 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1 [R=301,L] # 4. 将带尾部斜杠的URL重定向到无斜杠版本(真实目录除外) RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [R=301,L] # 5. 内部重写:无后缀URL实际映射到对应的.php文件(用户无感知) RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L]
各部分规则详解:
- 强制HTTPS+www:把原来的HTTPS规则和强制www合并,不管用户用HTTP访问,还是直接访问
bm-translations.de(不带www),都会直接跳转到标准的https://www.bm-translations.de/xxx,减少不必要的重定向次数。 - 放行静态文件:这是核心的例外规则——如果请求的是服务器上真实存在的文件(比如
logo.png、manual.pdf),直接跳过后面的所有重定向规则,保证这些文件能正常访问,不会被错误地移除后缀。 - 移除.php后缀重定向:通过匹配原始请求头(比如
GET /test.php HTTP/1.1),提取出test部分并跳转到/test,让所有带.php的旧URL都指向标准无后缀版本。 - 移除尾部斜杠:只针对非真实目录的URL生效(避免影响真实文件夹的访问),把
domain.de/test/这类带斜杠的URL统一跳转到domain.de/test。 - 内部重写:这是后台隐形操作,当用户访问
/test时,服务器会自动去加载对应的/test.php文件,用户完全看不到这个过程,实现了无后缀访问的效果。
注意事项:
- 确保你的Apache服务器已经启用了
mod_rewrite模块 - 测试阶段可以把
R=301改成R=302(临时重定向),确认所有跳转都符合预期后,再改回301(永久重定向,利于搜索引擎收录) - 如果有需要保留尾部斜杠的真实目录,可以在“移除尾部斜杠”的规则前添加例外条件
内容的提问来源于stack exchange,提问作者Krystian
相关产品推荐
相关产品推荐

