2010-05-06 66 views
0

我想重定向这样的:帮助,htaccess的

foo.com/xxx 

...这样的:

foo.com/somepage.php?id=xxx 

这是我要做的事:

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^([^/]+)$ http://foo.com/somepage.php?id=$1 [L] 

现在的问题,是foo.com不再工作。 我看不到foo.com既不foo.com/index.php

帮帮我! :)

+1

在传入请求结束时,'='是什么? – grossvogel 2010-05-06 17:55:11

+0

@grossvogel:让我们更进一步迷惑;-) – Josh 2010-05-06 18:14:39

+0

@Matias:你可以编辑你的问题来进行更新。我这次为你做了:) – Dolph 2010-05-06 18:18:11

回答

1
RewriteRule ^/([^/]+)$ /somepage.php?id=$1 [L] 

要小心寿,foo.com/1是一个坏的SEO在移动。

+0

RewriteRule不应该包含域名。但是,我知道foo.com是URI的一部分,就像'http:// bar.com/foo.com/xxx'一样...... – Josh 2010-05-06 17:52:35

+0

他指定[http://] foo.com /somepage.php?id=$1,但为了便于携带,你是对的。编辑。 – Ben 2010-05-06 17:59:28

+0

但在.htaccess文件中,我不相信RewriteRule *可以匹配域名......也许我错了。无论如何,你有看起来是正确的,所以+1 :-) – Josh 2010-05-06 18:03:49

0

尝试:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^(xxx=)$ /somepage.php?id=$1 [L] 

当然你没有明确地指出XXX =是什么...

1

1)你不需要的RewriteCond线。它旨在确定何时适用您的规则,而不是请求的哪一部分。

除非查询字符串为空,否则您的RewriteCond可用于使此规则适用。如果是这样,那么它没有任何问题。

2)我想你需要包括第一/在你的规则,如下:

RewriteRule ^/([^/]+)$ /somepage.php?id=$1 [L] 

[编辑]无论你的版本和我将匹配您的index.php文件,这或许可以解释为什么你网站现在坏了。如果你不想匹配的PHP文件,你可以添加喜欢

RewriteCond ${REQUEST_URI} !^.*\.php$ 

3)其他条件对于这样的规则,它可能有助于在末尾添加/?(括号的外面,在$前),以防他们寻找foot.com/xxx/,如果你想让它看起来像一个目录,这是有道理的。

+0

+1您的第一点。至于你的RewriteRule是否正确,谁知道,这个问题太模糊了。 – Josh 2010-05-06 17:53:28