URL重写仅在从主页单击链接时才有效

时间:2015-12-02 12:57:30

标签: php .htaccess mod-rewrite

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

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

这是我的.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]

我对网址重写知之甚少,我花了好几周时间才开始工作。请问我写错了什么?感谢

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

从已重写其网址的任何其他网页点击链接,例如从我们之前点击的页面,让我说我点击了它的网页http://page/page/page.php?page=contact,它应该重写到site.com/page/contact,但它不会重写。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你应该能够用更简单的东西来制作你需要的重定向。

类似的东西:

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8000);

在您网站根文件夹的RewriteEngine On RewriteCond %{QUERY_STRING} page=(.+) RewriteRule .* http://%{HTTP_HOST}/page/%1/? [NC,L] 文件中。

答案 1 :(得分:0)

我终于找到了解决方案!

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

我以为我总是把它写成page.php?page =“about-us”然后点击后,重写就会发生。

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