【发布时间】:2011-04-08 14:01:08
【问题描述】:
我正在尝试捕获一个网址,例如
http://www.mysite.com/somepage.php?sometext=somevalue
并将其重定向到。
http://www.mysite.com/index.php?page=somepage.php&sometext=somevalue
我尝试在线搜索此类 .htaccess,但找不到。
你能帮帮我吗?
【问题讨论】:
我正在尝试捕获一个网址,例如
http://www.mysite.com/somepage.php?sometext=somevalue
并将其重定向到。
http://www.mysite.com/index.php?page=somepage.php&sometext=somevalue
我尝试在线搜索此类 .htaccess,但找不到。
你能帮帮我吗?
【问题讨论】:
我很确定这是重复的,但我在找到它/它们时遇到了一些问题 [编辑:I found one,虽然可能不是最好的例子]。
无论如何,这是一个用相当标准的代码解决的相当标准的问题:
RewriteRule ^(.*)$ index.php?get=$1 [L,QSA]
RewriteRule 将整个请求捕获为$1,并将其作为page GET 参数传递给 index.php。
末尾的 [QSA] 标志表示采用任何现有的 GET 参数(在您的示例中为 sometext=somevalue),并将它们添加为新请求的附加 GET 参数。 ([L] 标志只是表示这应该是执行的最后一条规则。)
请注意,这也会重定向对图像或 CSS 文件等内容的请求,因此最好在此规则之前直接添加以下几行:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这些行表示“如果请求是针对实际存在的文件或目录,则不处理规则。”这样,对真实文件的请求将直接由 Apache 处理,而不是由您的 PHP 脚本处理(或更可能是错误处理)。
【讨论】:
RewriteRule ^(.*).php?sometext=(.*)$ index.php?page=$1.php&sometext=$2 [QSA,L] #rewrite
RewriteRule ^(.*).php?sometext=(.*)$ http://www.mysite.com/index.php?page=$1.php&sometext=$2 [R=301,L] #redirect
【讨论】: