使用 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文件