我正在尝试使用 mod_rewrite 在我的 .htaccess 文件中配置动态 mod 重写规则。我非常接近弄清楚这一点。我正在尝试获取这样的 URL:
http://www.mysite.com/index.php?service=14&title=events
http://www.mysite.com/index.php?service=48&title=planning
要自动重写为这些:
http://www.mysite.com/service/14/events
http://www.mysite.com/service/48/planning
到目前为止,这是我的代码:
RewriteRule ^service/(.*)/(.*)$ index.php?service=$1&title=$2 [NC,L]
RewriteCond %{QUERY_STRING} ^service=$1&title=$2 [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php [NC]
RewriteRule ^index.php$ /service/$1/$2 [L,R=301]
我认为最后一行可能有问题?我不是最擅长正则表达式,所以任何帮助将不胜感激。编辑:只是想清楚漂亮的 URL 确实有效。但是,旧 URL 不会重定向,并且仍在浏览器中显示。
我不确定这是否会更容易,但如果我能让 URL 看起来像这样:
http://www.mysite.com/service/14/title/events
http://www.mysite.com/service/48/title/planning
那么这也行得通。我真的不需要将第二个查询标题放在 URL 中,但如果将其留在 URL 中更容易,那就没什么大不了的。
编辑:已回答非常感谢所有为解决方案做出贡献的人。我为我的重写规则得到了这个:
RewriteRule ^index/service/(.*)/(.*)/$ index.php?service=$1&title=$2
一旦我添加了“索引”,它就可以与两个查询字符串一起使用。就重定向而言,我编辑了我的 php 脚本并在那里进行了所有 URL 重定向,这要容易得多。特别感谢 mkjasinski 指出这一点。