【问题标题】:Help with .htaccess file. mod_rewrite for custom urls?.htaccess 文件的帮助。 mod_rewrite 用于自定义网址?
【发布时间】:2025-12-19 03:00:11
【问题描述】:

情况:

我有几百个帖子,每个帖子都属于一个特定的类别。

A] 现在当用户访问主页时,内容与按日期排序的类别无关。

http://www.example.com

他可以浏览不同的页面,例如:

类型 1:http://www.example.com/3 对应于 http://www.example.com/index.php?page=3

我大概可以在 mod_rewrite 中做到这一点

B] 然后用户可以决定按以下类别查看:

类型 2:http://www.example.com/Football 将对应于

http://www.example.com/index.php?page=1&category=Football

然后他可以浏览以下页面:

类型 3:http://www.example.com/Football/5 其中 => http://www.example.com/index.php?page=5&category=Football

C] 我有一个名为 View 的目录,其中包含 index.php。它只显示单个帖子,例如:

类型 4:http://www.example.com/View/1312 => http://www.example.com/View/index.php?id=1312

这是我做的 mod_rewrite:

重写引擎开启 RewriteRule ^View/([^/.]+)/?$ View/index.php?id=$1 [L]

现在是我遇到的问题

在 C 点]:http://www.example.com/View/1312 工作正常,但 http://www.example.com/1312/ (注意尾部斜杠)分开并给出奇怪的结果。 Q1)那么我如何在这里保持一致性?

Q2) 理想情况下,如果没有 ID 为 1514 的帖子,我希望 http://www.example.com/View/1514 显示 404 错误,但现在我必须在 PHP 代码中手动处理。

处理此类动态网址的正确方法是什么?特别是如果网址错误。

Q3) 我如何确保http://www.example.comhttp://www.example.com/ 都重定向到http://www.example.com/index.php?page=1; (mod_rewrite 代码会有所帮助)

请注意,只有两个 index.php 文件。根目录中的一个,除了显示由 View 目录中的 index.php 处理的单个帖子外,它可以做所有事情。这是一种合乎逻辑的网站开发方式吗?

【问题讨论】:

  • 例如:*.com/questions/3897676/… 这是页面的当前 url,但是如果我更改编号。在说 3897777 的 url 中,是 apache 将没有它的 404 页面,或者服务器端代码将查看数据库并重定向到 404...这是如何工作的?

标签: php apache url mod-rewrite apache2


【解决方案1】:

试试这些规则:

RewriteRule ^$ index.php?page=1 [L]
RewriteRule ^([0-9]+)/?$ index.php?id=$1 [L]
RewriteRule ^View/([0-9]+)/?$ View/index.php?id=$1 [L]
RewriteRule ^([A-Za-z]+)/?$ index.php?category=$1&page=1 [L]
RewriteRule ^([A-Za-z]+)/([0-9]+)/?$ index.php?category=$1&page=$2 [L]

至于另一个问题:是的,由于 Apache 可以将这些请求映射到现有文件,因此它会以成功状态代码进行响应。现在,如果您的应用程序确定请求的资源不存在,您需要在应用程序中处理它并发送适当的状态代码。

【讨论】:

  • 谢谢你会试试看,你能澄清一下404错误和斜杠问题吗?
【解决方案2】:

要修复尾部斜杠,只需将 /? 放在模式末尾的 $ 之前

【讨论】:

  • 如果这是你的规则:RewriteRule ^View/([0-9]+)/?$ View/index.php?id=$1 [L] 这是你的模式:^View/( [0-9]+)/?$