请考虑:
RewriteRule ^([A-Za-z0-9-/]+)$ view.php?id=$1 [L] RewriteRule ^([A-Za-z0-9-/]+)$ lista.php?category=$1 [L]
字符串我删除了 .php 扩展名并编写了两条规则,但单击不同的两个链接时,打开的是同一个页面。只有第一条重写规则有效,而第二条规则无效。我该如何解决这个问题?
vq8itlhq1#
你面临的问题是由于你的两个RewriteRules都有相同的模式(^([A-Za-z0-9-/]+)$)。当一个URL与这些规则匹配时,第一个规则总是优先,因为它是第一个遇到的。第二个规则实际上被忽略了。要解决这个问题,您可以区分两个规则的模式。例如,您可以像这样修改模式:
(^([A-Za-z0-9-/]+)$)
RewriteRule ^view/([A-Za-z0-9-/]+)$ view.php?id=$1 [L] RewriteRule ^category/([A-Za-z0-9-/]+)$ lista.php?category=$1 [L]
字符串现在,像example.com/view/someid这样的URL将被重写为view.php?id=someid,像example.com/category/somecategory这样的URL将被重写为lista.php?category=somecategory。请确保相应地更新您的链接。如果仍然遇到问题,您可能需要检查Apache配置,以确保启用了mod_rewrite模块,并且正在读取和处理.htaccess文件。此外,检查.htaccess文件或其他配置文件中是否存在任何冲突的规则或条件。
example.com/view/someid
view.php?id=someid
example.com/category/somecategory
lista.php?category=somecategory
mod_rewrite
.htaccess
1条答案
按热度按时间vq8itlhq1#
你面临的问题是由于你的两个RewriteRules都有相同的模式
(^([A-Za-z0-9-/]+)$)
。当一个URL与这些规则匹配时,第一个规则总是优先,因为它是第一个遇到的。第二个规则实际上被忽略了。要解决这个问题,您可以区分两个规则的模式。例如,您可以像这样修改模式:
字符串
现在,像
example.com/view/someid
这样的URL将被重写为view.php?id=someid
,像example.com/category/somecategory
这样的URL将被重写为lista.php?category=somecategory
。请确保相应地更新您的链接。如果仍然遇到问题,您可能需要检查Apache配置,以确保启用了
mod_rewrite
模块,并且正在读取和处理.htaccess
文件。此外,检查.htaccess文件或其他配置文件中是否存在任何冲突的规则或条件。