用于 SEO URL 的 htaccess mod_rewrite 被错误地重写

用于 SEO URL 的 htaccess mod_rewrite 被错误地重写

我试图做的是拥有漂亮的 URL。在我希望整个字符串指向一个 PHP 脚本的情况下,我已经实现了这一点。但我没有。

因此,这是可行的:example.com/login/1/2=>/index.php?go=login&do=1&msg=2

使用:

RewriteEngine on
RewriteBase /
RewriteRule ^([0-9a-zA-Z_-]+)/?$ /index.php?go=$1 [L,QSA]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /index.php?go=$1&do=$2 [L,QSA]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /index.php?go=$1&do=$2&q1=$3 [L,QSA]

现在假设我想要example.com/webapp/1/2/3=>webapp.php?1=1&2=2&3=3

在上面内容下方添加以下内容:

RewriteRule ^webapp/?$ /webapp.php [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1 [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1&do=$2 [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1&do=$2&q1=$3 [L,QSA]

每次导航到都会example.com/webapp重定向到,删除任何查询字符串。index.php

如果我注释掉第一个代码块并导航到example.com/webappwebapp.php应得的结果。

我在任何日志中都没有收到任何错误。调用期间的访问日志向 webapp 报告 302

我究竟做错了什么?

答案1

通过在上面下面添加这个

你需要补充一点以上!

您的规则需要按具体性顺序排列。首先是更具体的规则,最后是最通用的规则。您的第一个规则块包含最通用/包罗万象的规则,因此这就是捕获请求并停止处理的地方。

答案2

我不确定您是否正确理解了漂亮 URL 的概念:https://en.wikipedia.org/wiki/Semantic_URL 你计划做的事肯定不会对你的 SEO 有帮助。而且你不应该进行临时重定向(302 重定向),而应该进行永久重定向 [R=301]。

相关内容