0

在没有 404 标头的 Apache php 服务器上捕获和保留重定向的 URI

我正在建立一个新闻网站/博客。我想以特定方式格式化 URL。如下所示:

    http://example.com/news/1234/title_of_article/

我不希望为每篇文章创建目录结构的麻烦和混乱。我已将 .htaccess 文件设置为重定向到主文件

     错误文档 404 /main_file.php

然后我的主文件使用 $_SERVER[REQUEST_URI] 找出请求的页面,然后构建页面。

这一切都很好。唯一的问题,我相信 .htaccess 重定向会向客户端发送 404 标头。我试图用主文件中的后续 200 标题来抵消这一点,但我认为它不起作用。W3C Validator 仍然检测到 404,搜索引擎似乎没有索引页面。 

如何在不向浏览器发送 404 错误的情况下保持 URL 的格式?有没有不制作几十个文件夹的简单替代方案?

4

1 回答 1

2

您可以使用简单的内部重定向将任何不存在的文件或文件夹重定向到您的main_file.php而不是使用ErrorDocumentfor 这样做:

# if folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
# redirect anything to
RewriteRule ^(.*)$ main_file.php/$1 [L]

并使用它进行处理,$_SERVER['REQUEST_URI']或者您可以进一步自定义它以将其作为如下参数处理:

# if folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
# redirect anything to
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ main_file.php?category=$1&id=$2&title=$3 [L]

以上将在内部重定向:

http://example.com/news/1234/title_of_article/

至:

http://example.com/main_file.php?category=news&id=1234&title=title_of_article

但是浏览器 URL 将保留:

http://example.com/news/1234/title_of_article/
于 2013-08-26T01:43:03.763 回答