.htaccess RewriteEngine转换链接而不更改链接

时间:2014-10-01 12:19:53

标签: php .htaccess mod-rewrite

我正在开始学习PHP和.htaccess的第一步,我的大部分新网站都是关于主要类别和少数子类别。 以下是我在编制之前的链接示例.htaccess RewriteEngine:

  • example.com/index.php?cat=email
  • example.com/index.php?cat=about&show=some

在.htaccess RewriteEngine的帮助下,我已将它们包括在内:

  • example.com/email /
  • example.com/about/some /

这是.htaccess的一部分:

RewriteRule ^([A-Za-z0-9-]+)/$ index.php?cat=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?cat=$1&show=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)$ index.php?cat=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?cat=$1&show=$2 [L]

现在的问题是,大多数内容都有内部链接,例如:“example.com/index.php?cat=about&show=some”更改所有内容是选项,但无论如何......还有什么可以做的吗? ?我听说有一些.htaccess选项可以自动转换所需格式的链接,而无需手动更改它们,因此PHP页面中的所有链接都是相同的,但是一旦用户加载页面,链接就会像(example.com/about/some/) )有没有这样的东西,还是有其他选择留下原始链接而不全部改变它们?

干杯!

1 个答案:

答案 0 :(得分:0)

您网站上的链接是使用您的PHP脚本创建的,带有htaccess的Apache无法以原始方式神奇地更改所有这些链接。

现在你可以做的是使用htaccess将旧URL重定向到新的URL,并重定向301。

例如,如果有人点击example.com/index.php?cat=email,Apache将重定向(= URL将被更改,并且将有另一个HTTP请求)到example.com/email/,然后将其重写为index.php?cat = email

将此添加到您的htaccess:

RewriteCond %{REQUEST_FILENAME} index.php$
RewriteCond %{QUERY_STRING} cat=([a-zA-Z0-9-]+)
RewriteRule ^ http://example.com/%1/? [L,R=301]

无论如何,我强烈建议您直接在代码中更改链接,因为即使我刚才解释的解决方案应该有效(未经测试),但是如果可以的话,使用重定向并不是很健康避免它们。