如何重写.htaccess中的查询字符串

问题描述 投票:0回答:1

我想要的是我想重写这个网址

https://www.example.com/newsite/it/categories?sector=1

变成这样:

https://www.example.com/newsite/it/products/industry-sector

我已经在.htaccess中尝试过这个重写规则

RewriteCond %{QUERY_STRING} ^sector=1$
RewriteRule ^newsite/it/products$ /newsite/it/products/industry-sector [R=301,L]

但是url没有发生任何变化

我认为这可能还取决于我拥有的其他重写规则,所以我将把整个 .htaccess 文件留给您,也许它会有所帮助(如果您也对现有规则有建议,我们总是欢迎):

.HTACCESS

RewriteEngine on

# Reindirizzamento alla radice del sito in base alla lingua della cartella
RewriteCond %{HTTP:Accept-Language} (it) [NC]
RewriteRule ^$ /newsite/it/index [L,R=301]
RewriteCond %{HTTP:Accept-Language} (en) [NC]
RewriteRule ^$ /newsite/en/index [L,R=301]
# Reindirizzamento predefinito
RewriteRule ^$ /newsite/it/index [L,R=301]



# Rimuovi l'estensione .php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]


RewriteCond %{QUERY_STRING} ^sector=1$
RewriteRule ^newsite/it/products$ /newsite/it/products/industry-sector [R=301,L]


# Reindirizza tutte le altre richieste alla radice del sito
RewriteCond %{REQUEST_URI} !^/newsite
RewriteRule (.*) /newsite/$1 [L]

我提前感谢任何愿意帮助我的人:)

.htaccess mod-rewrite url-rewriting
1个回答
0
投票

在对该问题的评论中,您确认您正在寻找仅针对一个此类类别的“特定”规则。这意味着您可以在规则本身中硬编码所需的 ID。这让事情变得简单。 然而,您似乎没有理解规则是如何运作的。您的规则需要与传入请求的 URL 相匹配,因此是“漂亮”的 URL。这可能是您的起点:

RewriteEngine on RewriteRule ^/?newsite/it/products/industry-sector$ /newsite/it/categories?sector=1 [L]

相反,更改您交付给请求客户的“传出”内容不应该通过重写的方式来完成。因为重写仅适用于“传入”请求。这意味着客户端必须发出“两个”请求。一个用于旧 URL,然后它会被重定向,并且必须发出第二个请求来获取新的、漂亮的 URL。这是非常低效的。除了重写之外,还有其他方法可以操纵您发送的内容,例如其中嵌入的链接。但通常这是一个坏主意。相反,您应该首先更改您的应用程序以使用漂亮的链接。

然而,在某些情况下,人们需要重定向此类“旧”URL。例如,如果此类 URL 存在于 Google 搜索或第三方网站中。那么这可能是正确的方法: RewriteEngine on RewriteCond %{QUERY_STRING} ^sector=1$ RewriteRule ^/?newsite/it/categories$ /newsite/it/products/industry-sector [R=301,L]

© www.soinside.com 2019 - 2024. All rights reserved.