我想重写这种类型的 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]