使用 htaccess 在两个不同的文件中使用相同的 URL 格式

Posted

技术标签:

【中文标题】使用 htaccess 在两个不同的文件中使用相同的 URL 格式【英文标题】:Using Same URL Format In Two Different Files With htaccess 【发布时间】:2022-01-14 08:23:40 【问题描述】:

我有两个名为 article 和 category 的文件。我使用 SEO URL 结构生成了 URL 格式。示例:

example.com/article-title

example.com/category-title

代码:

RewriteEngine ON

Options -Indexes

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^([0-9a-zA-Z-_]+)$ category.php?category_url=$1 [NC,NE,L]

RewriteRule ^([0-9a-zA-Z-_]+)$ single.php?article_seo_url=$1 [NC,NE,L]

RewriteRule ^page/(.*)$ index.php?page=$1

但是有一个问题。我不能在 .htaccess 文件中同时使用两种 url 格式。他看到第一行,但忽略了另一行。但我想对这两个文件使用相同的格式。你能帮忙吗?

【问题讨论】:

好的,让我们以example.com/foo-bar 为例- 可以告诉我,这是否应该是一篇文章或类别- 无需查看您的数据库?不?那么是什么让您认为服务器可以在这一点上做出这种区分? 您需要包含 pre identifier 例如 example.com/category/abcd... 用于类别和文章 example.com/article/xyz...跨度> 您唯一能做的就是使用 one 规则将其重写为 one 单个脚本 - 然后让该脚本查看通过在数据库中向上取值,判断它是属于一篇文章还是属于一个类别,然后相应地分支到进一步的处理逻辑中。 【参考方案1】:

让我们回过头来想一想:

我以前住在 1234 Stack Street。由于只有房屋开发商知道的原因,他们在 Stack Court 上开辟了下一条街道,并使用相同的数字。所以……如果邮政服务不注意,我的邮件有时会发往 1234 Stack Court。这已经够令人困惑了。你想要的更令人困惑:Stack Street 1234 号的两栋房子,不知何故 Apache 只是选择了正确的房子。那里的问题相当明显:地址需要一些独特的部分。

您的选择是

    添加一些东西来告诉 Apache 如何路由它。所以example.com/article/some-article-here 会告诉 Apache 这是一篇文章并将其发送给single.php?article_seo_url=$1

    将所有内容都指向一个 PHP 脚本。所以你只会有

    RewriteRule ^([0-9a-zA-Z-_]+)$ router.php?page=$1 [NC,NE,L]
    

    router.php 然后会判断它是文章还是类别并调用正确的 PHP 脚本。这里的问题是您必须确保您的类别和文章在其 URL 中是唯一的,否则我们会回到您最初遇到的相同问题。

【讨论】:

第二种方法可能有效。我试过后会报告的。非常感谢:)

以上是关于使用 htaccess 在两个不同的文件中使用相同的 URL 格式的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重定向规则相同的域但不同的前缀

两个版本的.htaccess 301重定向

浅谈.htaccess文件--避免滥用.htaccess文件

.htaccess重写以重定向两个不同的文件夹

如果两个库都在同一个 DLL 文件中使用,我们可以在 2 个不同的库文件中使用相同的函数吗?

为啥这个 .htaccess 重定向不起作用?