【问题标题】:Display canonical rewritten URLs and hide dynamic ones显示规范的重写 URL 并隐藏动态 URL
【发布时间】:2015-08-01 13:56:16
【问题描述】:

我尝试了无数的东西,但我找不到在浏览器 URL 栏中显示重写的 URL 而不是具有 3 个获取参数的 URL。

我的“丑陋”网址:

http://example.com/archive.php?id=tt2131523&date=20131004&title=graceland

我需要显示的“漂亮”网址:

http://example.com/tt2131523-20131004-graceland.html

这是我的 .htaccess 文件:

RewriteEngine on

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule .* http://%1%{REQUEST_URI} [R=301]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule .* https://%1%{REQUEST_URI} [R=301]

RewriteRule ^([^-]*)-([^-]*)-([^-]*)\.html$ /archive.php?id=$1&date=$2&title=$3 [NC,L]

我的其他 PHP 文件提供“丑陋”链接,这些链接有效,但 URL 仍然“丑陋”。不显示“美化”版本。

如果我在浏览器中键入“漂亮”的 URL,则重写工作并访问该页面。

我希望这样,即使用户键入“丑陋”的版本,他也会被重定向到“漂亮”的版本。

我是否需要更改我的链接结构(在其他 php 文件中)并使它们直接指向 URL 的重写版本,或者 .htaccess 中是否有显示重写版本的方法?

顺便问一下,旗帜还好吗?

谢谢。

【问题讨论】:

  • 您想添加一个重写条件,如果 URI 传递查询值,则将页面重定向到“漂亮”版本之前,然后使用重写规则处理漂亮版本你在上面提供了。这个条件应该是一个新的条件,并且放在你已有的重写规则之上。
  • 好的,谢谢马丁。它会是什么样子?
  • 你的htaccess在根目录吗?
  • 是的@Starkeen 为什么?

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

你可以用这个:

RewriteEngine On
RewriteCond %{THE_REQUEST} /archive\.php\?id=([^&]+)&date=([^&]+)&title=([^\s]+) [NC] 
RewriteRule ^ /%1-%2-%3.html? [NC,R,L]
RewriteRule ^([^-]+)-([^-]+)-([^.]+)\.html$ /archive.php?id=$1&date=$2&title=$3 [QSA,L,NC]

【讨论】:

  • 谢谢@Starkeen。有用 !所以,我知道我的 RewriteRule 没问题,但我没有 QSA 标志。那么,你的两条线在做什么?我想调用顺序很重要。你能评论你的答案吗?
猜你喜欢
  • 2011-09-23
  • 2014-10-04
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多