2012-04-12 41 views
1

我想从我的域中删除PHP获取查询。例如,我并不想显示example.com/?url=1234,而是将其重写为example.com/1234,隐藏查询但不删除它。我知道这是可能的,并阅读了很多关于如何做到这一点的教程,但我的代码只是不起作用。下面是我目前想:国防部重写帮助 - 隐藏PHP获取查询

RewriteEngine On 
RewriteCond %{QUERY_STRING} url= 
RewriteRule (.*) http://example.com/$1? [R=301] 

这是什么东西做的是完全剥离的查询,而不是仅仅移除?url=段。

回答

0

您正在考虑它的南辕北辙。重写不是客户看到的东西,而是服务器专有的东西。

这意味着您可以使example.com/1234工作,就好像客户端使用了example.com?url=1234一样。

要做到这一点,你可以使用以下行:

RewriteEngine On 
RewriteRule (.*) http://example.com/url=$1 [QSA] 
+0

这恐怕不行。 – 2012-04-12 09:15:17

+0

看看我编辑的评论。我想我可能误解了你:) – LasseValentini 2012-04-13 06:23:46

0

你需要提取的RewriteCond行的查询字符串的相关部分。

RewriteEngine On 
RewriteCond %{QUERY_STRING} url=(.*)(&|$) 
RewriteRule (.*) http://example.com/$1%1? [R=301] 

以上将放弃您给出的任何其他查询字符串参数(请参阅下面的示例)。 它也将保留文件名,如果给出。

例子:

http://example.com/?url=1234  ----> http://example.com/1234 
http://example.com/a/?url=1234  ----> http://example.com/a/1234 
http://example.com/?url=1234&a=b ----> http://example.com/1234 
+0

我已经尝试了这一行的线,但我得到一个404错误? – 2012-04-12 09:15:00

+0

这是重写,首先进入一个重定向循环,在URL中添加一吨&,然后抛出404错误。 – 2012-04-12 09:17:17

+0

(示例)文件夹“1234”是否存在?如果不是,那么它当然会抛出404错误。你是否仍然要求索引文件(例如'index.php')?如果是这样,那么这不是你问的。我建议就此提出另一个问题。 – diolemo 2012-04-12 09:21:57