.htaccess URL友好的htaccess

ddarikpa  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(109)

我一直在努力使我的网站网址更用户友好:
所以我一直这样修改htaccess:

RewriteEngine On

RewriteRule ^diseno-grafico/([^/.]+)/([^/.]+)$ diseno-grafico-filtro?id=$1&rubro=$2

RewriteRule ^diseno-web/([^/.]+)/([^/.]+)$ diseno-web-filtro?id=$1&rubro=$2

RewriteRule ^ilustracion/([^/.]+)/([^/.]+)$ ilustracion-filtro?id=$1&rubro=$2

RewriteRule ^arte/([^/.]+)/([^/.]+)$ arte-filtro?id=$1&rubro=$2

RewriteRule ^animacion/([^/.]+)/([^/.]+)$ animacion-filtro?id=$1&rubro=$2 

RewriteRule ^proyectos/([^/.]+)/([^/.]+)$ proyectos-filtro?id=$1&rubro=$2

RewriteRule ^ilustracion/galeria-clasica/([^/.]+)/([^/.]+)$ galeria-clasica?id=$1&rubro=$2

所以URL更干净更容易阅读:
https://ugocd.com/diseno-grafico/Accordion-Brochure/diseno_grafico
https://ugocd.com/diseno-web/UI,-SEO-y-Maquetaci%C3%B3n-HTML-CSS3/diseno_web
https://ugocd.com/ilustracion/Ilustracion-en-tintas/ilustracion
我想现在,我不知道如何做到这一点是不显示的URL的最后一部分diseno_grafico,diseno_web,ilustracion等,因为是重复的不五任何有用的。
有人能帮帮我吗?我想我快成功了
我试过用这个:
RewriteRule ^arte/([^/.]+)/([^/.]+)$ arte-filtro?id=$1&rubro=$2 [QSA]
这个,但它不发送变量rubro,我不想在url中显示它,但我希望它仍然发送它:

RewriteEngine On
RewriteRule ^(.*)/diseno_web$ $1 [R=301,L]
xn1cxnb4

xn1cxnb41#

在我看来,你只是想以文字的方式指定第二个组,这样你就不必在请求的URL中第二次指定它。
这就给我们留下了这样的东西,它会像预期的那样重写请求的URL,比如https://example.com/diseno-grafico/Accordion-Brochure

RewriteEngine On
RewriteRule ^diseno-grafico/([^/]+)/?$ diseno-grafico-filtro?id=$1&rubro=diseno-grafico [L]

这显然只适用于只覆盖一个这样的术语的“专门化”规则。* 也许 * 你可以这样概括:

RewriteEngine On
RewriteRule ^([\w-]+)/([^/]+)/?$ $1-filtro?id=$2&rubro=$1 [L]

您可能需要添加一个白名单,以防止该规则应用于您不希望重写的请求URL:

RewriteEngine On
RewriteRule ^(diseno-grafico|diseno-web|ilustracion)/([^/]+)/?$ $1-filtro?id=$2&rubro=$1 [L]

或者使用条件:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(diseno-grafico|diseno-web|ilustracion)/
RewriteRule ^([\w-]+)/([^/]+)/?$ $1-filtro?id=$2&rubro=$1 [L]

或者这样一个变体来增强可读性:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/diseno-grafico/ [OR]
RewriteCond %{REQUEST_URI} ^/diseno-web/ [OR]
RewriteCond %{REQUEST_URI} ^/ilustracion/
RewriteRule ^([\w-]+)/([^/]+)/?$ $1-filtro?id=$2&rubro=$1 [L]

我决定忽略你给出的最后一个例子。请求的URL具有不同的模式。处理这种差异当然是可能的,但它使实现更加复杂,因此更难维护。我认为最后一个例子是问题中的一个错误,因为你没有在描述中提到这个异常。
处理这种模式的直接方法是:

RewriteEngine On
RewriteRule ^(?:.+/)?([\w-]+)/([^/]+)/?$ $1-filtro?id=$2&rubro=$1 [L]

它忽略所有内容,包括第一个斜杠,将该匹配模式锚定到所请求URL的末尾。

相关问题