这种重写方法有效,但它不能强制 url 重写/重定向到新的 url。
我用这个:
RewriteEngine on
RewriteRule ^page/([^/\.]+)$ search.php?q=$1
我可以访问重写的 url (project/page/etc..),但旧的 urls/links (search.php?q=etc) 仍然可以访问而无需重定向。
注意:我使用$_SERVER
变体来创建 url,并在 localhost 上。
您必须将项目/页面重写为 search.php?为了隐藏丑陋的网址。
并重定向search.php?到项目/页面,以使规范 url 成为访问该资源的唯一方法。
在您的代码中没有提及重定向,您只是在重写。
这样想
要将所谓的重定向ugly URLs
到 SEO 友好 URL,您需要另一个重写规则。有这样的 .htaccess 代码:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^page/([^/\.]+) search.php?q=$1 [L,QSA,NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+search\.php\?q=([^\s]+) [NC]
RewriteRule ^ page/%1? [R=302,L]
一旦您确认它工作正常,请更改R=302
为R=301
.
您需要一个[R=301]
重写规则才能将其转换为客户端重定向。否则,它纯粹是内部重写,客户端永远不会看到 url 被更改。
例如
RewriteRule ^page/([^/\.]+)$ search.php?q=$1 [R=301,L]