0

这种重写方法有效,但它不能强制 url 重写/重定向到新的 url。

我用这个:

RewriteEngine on
RewriteRule ^page/([^/\.]+)$ search.php?q=$1 

我可以访问重写的 url (project/page/etc..),但旧的 urls/links (search.php?q=etc) 仍然可以访问而无需重定向。

注意:我使用$_SERVER变体来创建 url,并在 localhost 上。

4

3 回答 3

4

您必须将项目/页面重写为 search.php?为了隐藏丑陋的网址。

重定向search.php?到项目/页面,以使规范 url 成为访问该资源的唯一方法。

在您的代码中没有提及重定向,您只是在重写。

这样想

  • rewrite 将丑陋的 url 隐藏在规范 url 后面(它隐藏了它们,它不会消除它们);
  • 重定向以类似“search.php?已移至项目/页面,尝试该链接”之类的消息响应浏览器,并且浏览器跟随新链接;
于 2012-05-25T21:52:03.340 回答
1

要将所谓的重定向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=302R=301.

于 2012-05-25T22:20:35.983 回答
-2

您需要一个[R=301]重写规则才能将其转换为客户端重定向。否则,它纯粹是内部重写,客户端永远不会看到 url 被更改。

例如

RewriteRule ^page/([^/\.]+)$ search.php?q=$1 [R=301,L]
于 2012-05-25T21:59:46.170 回答