【问题标题】:Redirecting in HTACCESS from Query String to URL在 HTACCESS 中从查询字符串重定向到 URL
【发布时间】:2012-10-27 20:05:42
【问题描述】:

我正在尝试将带有查询字符串的 URL 重定向到没有查询字符串的 URL,但是,我想使用查询字符串中的值。

在下面的示例中,我使用的是单个状态,但我希望它是动态的,这意味着它将解析任何带有查询字符串的 URL 到一个干净的 URL,该 URL 仍然包含查询字符串中的值。

Example: http://www.mywebsite.com/?state=CA redirects to http://www.mywebsite.com/CA/

我厌倦了将以下信息添加到我的 HTACCESS 文件中,但没有成功:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+)
RewriteRule ^ /%1/%2? [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ )
RewriteRule ^ /%1? [L]

这些都有效,但是我必须输入我想避免的每个重定向:

RewriteCond %{QUERY_STRING} state=FL
RewriteRule ^$ "http://www.mywebsite.com/fl/?" [R=301,L]
RewriteCond %{QUERY_STRING} state=RI
RewriteRule ^$ "http://www.mywebsite.com/ri/?" [R=301,L]

有什么想法吗?我在 Apache 上使用 WordPress。我相信一切都是最新的。

【问题讨论】:

    标签: string .htaccess redirect


    【解决方案1】:

    原始规则不起作用的原因是因为您的状态似乎是:

    state=FL
    

    FL 永远不会匹配正则表达式[a-z]+,因为[a-z] 的字面意思是任何小写字母,而 F 和 L 都不是小写字母。试试:

    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+) [NC]
    RewriteRule ^ /%1/%2? [L,R=301]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ ) [NC]
    RewriteRule ^ /%1? [L,R=301]
    

    所以条件中的[NC] 标志使得正则表达式不区分大小写。

    【讨论】:

    • 我在使用该代码时收到 500 错误。下面的代码也在我的 htaccess 文件中,因为它是 WordPress。这会导致问题吗?
    • RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /index.php [L]
    • @JonPotts 他们需要在您的 wordpress 规则之前使用,此外,您需要在规则中添加 R=301 标志(请参阅编辑)
    • 我能否让它适用于中间有空格的值?可能是一个 - 或另一个符号?假设我想在值中拼出 New York 而不是 NY。使用当前代码将无法正常工作,但如果可能,我希望它重定向到 website.com/new-york/。
    • @JonPotts 您可以将([a-z]+) 替换为更通用的名称,例如([^&\ ]+),以匹配任何不是参数结尾的内容。
    猜你喜欢
    • 2022-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多