Apache mod#u rewrite不';我不能双向工作

Apache mod#u rewrite不';我不能双向工作,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我得到一个原始url: www.mydomain.com/menu/?myid=29&mypage=pizza-hut.html 使用以下mod_重写代码: Options +FollowSymLinks RewriteEngine on RewriteRule ^menu/([^/]*)/([^/]*)\.html$ /menu/?pid=$1&alias=$2 [L] 我得到了一个很好的网址: www.mydomain.com/menu/29/pizzahut.html 所以,上面

我得到一个原始urlwww.mydomain.com/menu/?myid=29&mypage=pizza-hut.html

使用以下mod_重写代码:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^menu/([^/]*)/([^/]*)\.html$ /menu/?pid=$1&alias=$2 [L]
我得到了一个很好的网址: www.mydomain.com/menu/29/pizzahut.html

所以,上面的两个url引用同一个页面…对! 现在真正的交易是

为什么我键入的url是原始url:

www.mydomain.com/menu/?myid=29&mypage=pizza-hut.html

它不会重定向到

www.mydomain.com/menu/29/pizzahut.html


它在地址栏中保留了它原来的一行,有什么我应该添加的吗?

基本上,您生成的所有链接都应该是漂亮的URL。在您的任何页面中都没有类似于
/menu/?myid=29&mypage=pizzahut.html
的链接。使用干净的URL,确保在后端正确路由,如下所示:
www.mydomain.com/menu/29/pizzahut.html

您在服务器上重新编写的规则将漂亮的URL添加到您的内容理解的内容中(例如
/menu/?myid=29&mypage=pizza-hut.html
)。这是最重要的部分。如果要更正所有针对丑陋URL的直接请求,首先需要确保所有页面都开始使用好看的URL,然后可以执行以下操作:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /menu/?\?myid=([^&]+)&mypage=([^&\ ]+)
RewriteRule ^menu/?$ /menu/%1/%2? [R=301,L]

请注意
后面的
\html

因为:请参阅本文开头的解释是的…在我所有的链接中使用干净的URL是最简单的方法,并隐藏丑陋的URL。让我看看你给我的推荐信我能做些什么。谢谢。嗨@jon lin,我的代码正常工作了:RewriteCond%{THE_REQUEST}^[A-Z]{3,9}\/菜单/?\?myid=([^&]+)&mypage=([^&\]+)RewriteRule^菜单/?$/菜单/%1/%2。\html[R=301,L]RewriteRule^菜单/([0-9]+)/(.+)/$\.html/menu/?myid=$1&mypage=$2[L]。但随后似乎出现了这样的疑问:www.mydomain.com/menu/29/pizza hut.html?myid=29&mypage=pizza-hut.html似乎与QSA有关?@Gregory抱歉,我错过了一个?在规则的末尾。它需要读取
重写规则^menu/?$/menu/%1/%2?[R=301,L]
,请注意
%1/%2
末尾的
,“?”有魔力!!谢谢你,你就是那个人我应该给你5颗星
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /menu/?\?myid=([^&]+)&mypage=([^&\ ]+) 
RewriteRule ^menu/?$ /menu/%1/%2.\html? [R=301,L]