【问题标题】:Issue with htaccess file for website网站的 htaccess 文件问题
【发布时间】:2018-02-08 20:40:38
【问题描述】:

我正在运营一个网站,但在 google 上遇到了索引问题。主要是因为我使用基于 php 标识符的链接,例如 ?go=7

现在我创建了一个.htaccess 文件:

RewriteEngine On
RewriteBase /
RewriteRule ^tubes/([*]+)\.html$ index.php?tubeID=$1 [L]

我还尝试了不同的正则表达式:

^tubes/([A-Za-z0-9-]+)/?$

文件本身正在运行,因为当我在其中输入错误时,网站崩溃了。尝试使用此脚本/说明有效https://docs.bolt.cm

我真的被困住了。有什么帮助吗?

【问题讨论】:

  • 什么不起作用?你有任何应该工作的 URL 示例吗?
  • 重写不工作。是的:swissnixie.com/index.php?tubeID=3400005
  • 但是您的重写不会抓取该 URL。您的模式正在寻找:swissnixie.com/tubes/some-string.html。你似乎已经把它弄反了。第一部分 RewriteRule 是它应该匹配的模式。第二部分是它在调用您的应用程序时内部使用的 URL。一个常见的误解是 rewrites 在浏览器中重写了实际的 URL,但事实并非如此。它只是将一种模式映射到“幕后”的 URL。
  • google 非常习惯于带有参数的 url,我怀疑这真的是一个问题。
  • 所以这个教程完全是垃圾? addedbytes.com/blog/url-rewriting-for-beginners ...“模式和替换”中的示例看起来与我的问题非常相似

标签: php .htaccess


【解决方案1】:

你为什么不试试:

RewriteEngine On
RewriteBase /
RewriteRule ^tubes/(.*)\.html$ index.php?tubeID=$1 [L]

然后,您要访问的 URL 将是这样的:

http://swissnixie.com/tubes/34000005.html

【讨论】:

  • 不过,我注意到,我注意到您的图像位于名为“tubes”的文件夹中,它恰好与您尝试使用的重写规则的名称相同。如果您不小心,这有时会导致问题。
  • 谢谢提示,我会改的。但是您发布的代码并没有改变我的问题:/
  • 实际上将需要更多代码来转换传入的 url 以匹配平面 .html url。这不是重写规则的作用。
  • 这样的规则更像是这样(这是我的想法,未经测试) RewriteRule ^index\.php?tubeID=(.*)$ example.com/tubes/$1.html [L ,R=301]
【解决方案2】:

您可以使用以下正则表达式:

RewriteRule ^tubes\/([^\/]+)\.html?$ index.php?tubeID=$1 [L]

这将捕获所有匹配的 URL,如下所示:

http://example.com/tubes/34000005.html
http://example.com/tubes/my-video-id.html

说明

tubes\/  Make sure the url starts with tubes/
([^\/]+) Capture everything that is not a slash (/)

更新

若要反向重定向,请添加以下内容:

RewriteCond %{QUERY_STRING} ^tubeID=([0-9]*)$
RewriteRule ^index\.php$ http://example.com/tubes/%1.html [R=302,L]

这会将http://example.com/index.php?tubeID=10 重定向到http://example.com/tbues/10.html

【讨论】:

  • 我试过了,但它不起作用......我有可能把整个想法弄错了吗?我想让 "index.php?tubeID=1" 变成 ".com/tubes/"id"/ 而不是其他方式
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2012-12-03
  • 2011-10-03
相关资源
最近更新 更多