2013-05-31 84 views
-4

我需要做这样的事情:URL http://domain.com/view.php?show=my_article_name应该被重定向到http://domain.com/my_article_name/我该怎么做?提前致谢。使用.htaccess追加查询字符串到URL

+3

嗨,在这里堆栈溢出和更广泛的互联网上有一百万资源。请始终先搜索。谢谢! –

+0

不幸的是,我发现只有这个版本,但它不适合我:'RewriteRule^blog /([ - a-zA-Z0-9 _] +)/? view.php?&show = $ 1 [L]',即重定向到http://domain.com/blog/my_article_name –

回答

5

你可以试试这个规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+view\.php\?show=([^\s]+) [NC] 
RewriteRule^/%1? [R=302,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+)$ /view.php?show=$1 [L,QSA,NC] 

一旦你验证它是否工作正常,更换R=302R=301。避免在测试mod_rewrite规则时使用R=301(永久重定向)。

+0

谢谢,它适合我! –

+0

不客气,很高兴它解决了。 – anubhava

1

非常少见有人想要一个SEO不友好的URL重定向到一个搜索引擎友好的一个,通常是周围的其他方法,所以请确保您想要的:

http://domain.com/view.php?show=xyz => http://domain.com/xyz/ 

,而不是更常见:

http://domain.com/xyz     => http://domain.com/view.php?show=xyz 

你会使用这样的事情来捕捉查询字符串,并将其传递给URL(我已经添加到R=301标志,但如果你不想永久重定向,与R替换此) :

RewriteBase /
RewriteCond %{QUERY_STRING} ^show=(.*)$ [NC] 
RewriteRule ^view.php$   %1/   [NC,R=301,L] 

未经测试,因为我目前没有运行Apache,但如果它有帮助但不正确,请给我工作代码来修复我的答案。

+0

不幸的是它不适用于我。我得到了404个。 –

+0

检查access.log和error.log,Apache问题通常很容易调试。 –

+0

@RedOctober - 编辑,告诉我,如果修复它。注意:在测试时,您可能想使用'R'而不是'R = 301',因为有些浏览器长时间缓存301s。 –

相关问题