我想要的是我想重写这个网址
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]
我提前感谢任何愿意帮助我的人:)
在对该问题的评论中,您确认您正在寻找仅针对一个此类类别的“特定”规则。这意味着您可以在规则本身中硬编码所需的 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]