2013-08-31 141 views
-1

我正在重建我的网站并希望更改网址 - 我需要让搜索引擎知道,因此我将使用301重定向。格式化搜索网址

我的网页位于http://site.com/search.php

我想使用这个网址

http://site.com/search?s=foo&bar=bat&so+on&so+forth 

我的RewriteCond是

RewriteRule !^search search.php [R=301,L] 

我得到一个404。我在做什么错?

+0

你不能直接在RewriteRule上使用否定,你想要做什么?将php重定向到非php版本? – Prix

+0

重定向/搜索/到search.php - 基本上,我想从URI中删除.php,并且在?之前没有结尾的斜杠。我知道如何做到这一点,但当我添加301时,我一直在使用的功能会中断 - 所以我需要得到一个有301的工作。 – timgavin

+0

如果我的答案适用于您,请告诉我。 – Prix

回答

1

试试这个,它应该删除.php并重定向到search并显示php的内容:

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*)\.php [NC] 
RewriteRule^/%1 [R=301,QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^([^/]+)/?$ $1.php [L] 

在第一个原则是,我们正在检查的要求,看看是否有任何.php存在,如果是的话,我们将它重定向到没有.php的URL。

(.*)将在.php之前捕获任何内容并且标记QSA将确保将查询字符串附加到它。

^([^/]+)/?$这将匹配任何不是/,直到我们找到/或结束。

所以如果我们访问domain.com/index它会捕获索引并重定向到index.php内部。

+0

工作就像一个魅力,谢谢。 :)你能否给我一点理解发生了什么事情,所以在添加未来规则时我不会搞砸了? – timgavin

+0

@Tim让我知道,如果这是足够好的,或者如果有一个你不明白的特定部分。 – Prix

+0

这是一件美丽的事情。解释是完美的,谢谢。 :) – timgavin