【问题标题】:URL rewrite only works if link was clicked from homepage仅当从主页单击链接时,URL 重写才有效
【发布时间】:2015-12-02 12:57:29
【问题描述】:

我注意到我的 url 重写代码只有在我从主页单击页面时才能正常工作。如果我点击另一个页面,它只是不会重写 url。

例子。我从主页单击联系页面。它可以很好地重写为 site.com/page/contact 。但是,如果我从联系页面单击关于我们的页面,而不是将关于我们的页面显示为 site.com/page/about-us,它会显示 site.com/page/page.php?page=about-us。

这是我的 .htaccess 代码

AddDefaultCharset UTF-8
Header unset ETag
FileETag None

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

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

RewriteRule ^post/([^/]+)/?$ post.php?post=$1 [L,QSA]

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

RewriteRule ^page/([^/]+)/?$ page.php?page=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

我对 url 重写知之甚少,我花了好几个星期才让它工作。请问我写错了什么?谢谢

从主页 site.com/page/page.php?page=about-us 点击的链接,重写为 site.com/page/about-us。

从任何其他已重写其 url 的页面点击的链接,例如从之前点击的 about us 页面,假设我从它点击了联系页面 site.com/page/page.php?page=contact ,它应该重写为 site.com/page/contact ,但它不会重写。

【问题讨论】:

  • contect 是目录吗?或网页,您的联系页面的位置在哪里?
  • 包括联系人页面在内的所有页面都在同一个文件夹中
  • 我已经添加了点击链接的信息以及来自哪里

标签: php .htaccess mod-rewrite


【解决方案1】:

如果我理解正确,那么您应该能够使用更简单的东西生成所需的重定向。

类似:

RewriteEngine On

RewriteCond %{QUERY_STRING} page=(.+)
RewriteRule .* http://%{HTTP_HOST}/page/%1/? [NC,L]

在您网站根文件夹的.htaccess 文件中。

【讨论】:

    【解决方案2】:

    我终于找到了解决办法!

    解决方案是将链接写为 site.com/page/contact-us 或 site.com/page/about-us 。

    我以为我总是必须把它写成 page.php?page="about-us" 然后点击后,重写发生。

    我在脚本中将 page.php?page="about-us" 替换为 http://site.com/page/about-us。然后从数据库中检索页面。即使我在页面之间跳转,URL 也保持干净。 我不知道它有可能做到这一点,但由于某种原因它起作用了。任何理解为什么这样做的人都应该解释一下。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多