【问题标题】:I want to do 301 redirect but it's going wrong我想做 301 重定向但它出错了
【发布时间】:2020-02-05 13:42:14
【问题描述】:
我想将用户重定向到错误 url 上的 404 页面,但它最终会从所有页面重定向。谁能告诉我怎么了?
这是我的 .htaccess 代码
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME}\.php !-f
RewriteRule . /404.php [L,R=301]
【问题讨论】:
标签:
.htaccess
url
redirect
url-rewriting
【解决方案1】:
您不应“重定向”到错误文档。您应该改为使用 ErrorDocument 指令配置自定义错误文档,然后 Apache 将使用内部子请求以 404.php 进行响应,并确保设置了正确的 HTTP 状态(即 404,而不是 301)。
您检查.php 文件是否存在的条件(在重写之前)并不完全正确,具体取决于所请求的 URL 路径。 REQUEST_FILENAME 包含请求映射到的文件系统路径,它不一定与被请求的 URL 路径相同。
假设您的 .htaccess 文件位于文档根目录中,请尝试以下操作:
# Define custom error documents
ErrorDocument 404 /404.php
RewriteEngine on
# Rewrite - append .php extension if required.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]