Htaccess 使用两个参数重写 URL

Htaccess 使用两个参数重写 URL

我想重写这种类型的 URL

https://mywebsite.com/content/page.html?id=12&title=my-page-title

https://mywebsite.com/12/my-page-title.html

使用 generateit.net/mod-rewrite/ 我得到以下规则:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /content/page.html?id=$1&title=$2 [L]

但是在 htaccess.madewithlove.com/ 上测试时我得到了这个:

The new url is https://mywebsite.com/content/page.html?id=content&title=page

答案1

“重写”是指一个过程,其特点是输入您的网站访问者请求的 URL,以及其输出传递给您的 CMS 以生成所请求页面的 URL。

服务地点https://www.generateit.net/mod-rewrite/生成重写规则,允许通过以下形式的 URL 访问你的页面

https://mywebsite.com/12/my-page-title.html

尽管底层系统期望 URL 的形式为

https://mywebsite.com/content/page.html?id=12&title=my-page-title

它通过以下方式实现重写以前的后者,这正是您的问题中引用的重写规则所做的。

要使用以下服务进行测试https://htaccess.madewithlove.com/,你必须输入

https://mywebsite.com/12/my-page-title.html

在标有“填写您要应用规则的 URL”的字段中。似乎您输入了重写结果那里。

答案2

感谢 StackOverflow 的 RavinderSingh13 帮助我编写代码。

转向

https://mywebsite.com/pages/article.html?id=1&title=Title-Goes-Here

进入

https://mywebsite.com/pages/article/1/Title-Goes-Here

使用

RewriteEngine ON
##External redirect in browser rules here....
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} \s/([^/]*)/([^.]*)\.html\?id=([^&]*)&title=(\S+)\s [NC]
RewriteRule ^ /%1/%2/%3/%4? [R=301,L]

##Internal rewrite to html file rules here....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$  $1/$2.html?id=$3&title=$4 [QSA,NC,L]

另外,在 head 元素之后,我必须放置:

<base href="/" />

如果主文件夹中有 atricle.html,则使用 htaccess 您还可以使用:

RewriteEngine on
RewriteRule ^article/([0-9]+)/([0-9a-zA-Z_-]+)$ article.html?id=$1&title=$2 [NC,L] 

相关内容