Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有关.htaccess文件的帮助。自定义URL的mod_重写?_Php_Apache_Url_Mod Rewrite_Apache2 - Fatal编程技术网

Php 有关.htaccess文件的帮助。自定义URL的mod_重写?

Php 有关.htaccess文件的帮助。自定义URL的mod_重写?,php,apache,url,mod-rewrite,apache2,Php,Apache,Url,Mod Rewrite,Apache2,情况: 我有几百篇文章,每一篇都属于一个特定的类别 A] 现在,当用户访问主页时,内容与按日期排序的类别无关 他可以浏览不同的页面,如: 类型1:对应于 我可能可以在mod_rewrite中完成这项工作 B] 然后,用户可以决定按类别查看,如: 类型2:将对应于 然后,他可以浏览以下页面: 类型3:哪个=> C] 我有一个名为View的目录,其中包含index.php。它只显示个别帖子,如: 类型4:=> 以下是我所做的修改: 重新启动发动机 重写规则^View/([^/]+)/?$Vie

情况:

我有几百篇文章,每一篇都属于一个特定的类别

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

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

类型1:对应于

我可能可以在mod_rewrite中完成这项工作

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

类型2:将对应于

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

类型3:哪个=>

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

类型4:=>

以下是我所做的修改:

重新启动发动机 重写规则^View/([^/]+)/?$View/index.php?id=$1[L]

下面是我遇到的问题

在C点中]:工作正常,但 (注意后面的斜杠)分开并给出奇怪的结果。 问题1)那么,我如何在这里保持一致性

Q2)理想情况下,如果没有id为1514的post,我希望显示404错误,但现在我必须在PHP代码中手动处理该错误

处理这种动态URL的正确方法是什么?尤其是url错误时

问题3)我如何确保&两者都重定向到;(修改代码会有帮助)

请注意,只有两个index.php文件。根目录中的一个,它除了显示由视图目录中的index.php处理的单个帖子之外,还执行其他操作。这是开发网站的一种合乎逻辑的方式吗?

试试以下规则:

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错误和尾随斜杠问题吗?例如:这是页面的当前url,但是如果我将url中的编号改为3897777,那么将不会出现的apache是否是404页面,或者服务器端代码将查看数据库并重定向到404…这是如何工作的?如果这是你的规则:RewriteRule^View/([0-9]+)/?$View/index.php?id=$1[L]这是您的模式:^View/([0-9]+)/$