URL重写只有在从主页点击链接时才有效


URL rewrite only works if link was clicked from homepage

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

示例。我从主页点击联系人页面。它将fine重写为site.com/page/contact。但是,如果我从联系人页面中单击about us页面,而不是将about us页显示为site.com/page/about-us,它会显示site.com/page/page.php?page=关于我们。

这是我的.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=关于我们,重写到site.com/page/about-us.

从任何其他已经重写url的页面点击的链接,例如从之前点击的关于我们的页面,比如说我从它的site.com/page/page.php点击了联系人页面?page=contact,它应该重写到site.com/page/contact,但它没有重写。

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

类似于:

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

位于网站根文件夹中的.htaccess文件中。

我终于找到了解决方案!

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

我以为我总是要把它写成page.php?page="about us",然后单击后,将进行重写。

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