使用 .htaccess 将查询字符串附加到 URL [关闭]

Posted

技术标签:

【中文标题】使用 .htaccess 将查询字符串附加到 URL [关闭]【英文标题】:Use .htaccess to append query string to URL [closed] 【发布时间】:2013-05-27 03:14:19 【问题描述】:

我需要做这样的事情: URLs http://domain.com/view.php?show=my_article_name 应该被重定向到 http://domain.com/my_article_name/ 我该怎么做?提前致谢。

【问题讨论】:

您好,在 Stack Overflow 和更广泛的 Internet 上,这里有一百万种资源。请始终先搜索。谢谢! 不幸的是,我只找到了这个版本,但它不适合我:RewriteRule ^blog/([-a-zA-Z0-9_]+)/? view.php?&show=$1 [L],即重定向到domain.com/blog/my_article_name 【参考方案1】:

你可以试试这个规则:

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=302 替换为R=301。在测试你的 mod_rewrite 规则时避免使用R=301(永久重定向)。

【讨论】:

谢谢,它对我有用! 不客气,很高兴它成功了。【参考方案2】:

很少有人想要将一个对 SEO 不友好的 URL 重定向到一个对 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,但如果它有帮助但不正确,请给我工作代码来修复我的答案。

【讨论】:

不幸的是,它对我不起作用。我得到了 404。 检查 access.log 和 error.log,Apache 问题通常很容易调试。 @RedOctober - 已编辑,告诉我是否可以解决。注意:在测试时,您可能希望使用 R 而不是 R=301,因为某些浏览器会长时间缓存 301。 我还有 404 :( access.logerror.log 中有什么内容?您需要为我提供更多信息以提供进一步帮助,因为我这里没有运行 Apache。

以上是关于使用 .htaccess 将查询字符串附加到 URL [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将查询字符串附加到 htaccess PDF 重定向 URL

htaccess 重定向附加查询字符串?

如何将查询字符串附加到错误文档

.htaccess 获取整个查询字符串到一个变量

空查询附加到主 URL .htaccess 问题

如何在现有的 Hql 或 SQL 查询中应用“With UR”子句?如何在我的查询为字符串格式的 Java 文件中附加它