【发布时间】:2019-06-07 01:42:59
【问题描述】:
我知道这个问题过去可能重复或回答过,但我已经阅读了 apache.org 网站并看到了许多其他类似的答案,但由于我是新手,所以到目前为止我找不到合适的解决方案。 .htaccess 和 apache。
为简单起见,我们假设我网站的 URL 是:https://www.example.com
主页是index.php,有一个提交表单,其中包含三个名称:sp、ar 和in。 sp 是强制性的(用户必须输入一个值),ar 和 in 是可选的。
当我提交表单时,文件results.php 被执行。当所有 3 个下拉列表都有值时,提交的 URL 的形式为:
1) https://www.example.com/results.php?sp=textvalue1&ar=textvalue2&in=textvalue3
此外,根据ar 和in 是否有(或没有)值,URL 的其他可能形式是:
2) https://www.example.com/results.php?sp=textvalue1&ar=&in=
3) https://www.example.com/results.php?sp=textvalue1&ar=textvalue2&in=
4) https://www.example.com/results.php?sp=textvalue1&ar=&in=textvalue3
我想将这些“丑陋”的 URL 转换为对 SEO 友好的 URL。
对于案例 1(所有 3 个下拉菜单都有值),我想提交表单并在浏览器的 URL 字段中查看:
(case 1) https://www.example.com/textvalue1/textvalue2/textvalue3
并获得相同的结果(重要)!
同样,我希望其他对 SEO 友好的 URL:
(case 2) https://www.example.com/textvalue1
(case 3) https://www.example.com/textvalue1/textvalue2
(case 4) https://www.example.com/textvalue1/textvalue3
我的猜测是我必须做两件事:首先,将丑陋的 URL 转换为 SEO 友好的 URL,其次,将新的 SEO 友好的 URL 视为旧的丑陋 URL。
到目前为止,我已经在我的 .htaccess 文件中为案例 2 尝试了以下命令,但没有任何反应:
Options +FollowSymlinks -Indexes -MultiViews
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/results\.php\?sp=([a-zA-Z]+)\s [NC]
RewriteRule ^ /%1? [R=302,L]
RewriteRule ^/([[a-zA-Z]]+)$ /results.php?sp=$1 [L]
【问题讨论】:
-
这行不通。当然,您可以为此实现重定向和重写规则。但是,据我所知,您无法确定像
https://www.example.com/foo/bar这样的 URL 实际上试图表达什么:bar的价值是什么?ar或in? -
但是如何使用多个/不同的条件和规则,每种情况一个?
-
当然,如果你可以命名条件来区分这两种含义,那么你可以实现它们。但是你没有在你的问题中说出任何名字。那么它们是什么?
-
你的回答让我有点困惑。据我所知,不需要命名条件,只需使用正确的正则表达式值来决定在哪里应用 RewriteRule。
-
问题不在于您是否可以应用规则。你完全正确,你只需要一个匹配的正则表达式。我在这里指出的问题是:如果我在第一条评论中提到的示例 URL 有一个匹配的正则表达式,那么你会将哪个 GET 参数分配给你在传入请求中捕获的值
bar?您会将其分配给ar还是in?这在您的问题中没有以任何方式定义,我不能为此提供任何逻辑。再说一遍:你能说出一个条件或逻辑来决定 URL 的实际含义吗?
标签: apache .htaccess mod-rewrite url-rewriting friendly-url