【问题标题】:htaccess redirect pretty URLs to ugly oneshtaccess 将漂亮的 URL 重定向到丑陋的 URL
【发布时间】:2019-07-14 20:49:45
【问题描述】:

所以,我正在努力使我的 URL 更漂亮和更易于共享。我有一个网站,其中包含用户当前可以使用example.com/?i=itemName 访问的一些项目。但是,我希望用户能够改为写 example.com/itemName

这意味着我必须使用 htaccess 进行一些重定向。我想将所有 URL 重定向到 example.com 本身,但保持 URL 相同。为了澄清,一个例子:

用户类型example.com/niceItem。服务器显示example.com的内容,但保持URL为example.com/niceItem(或者,它可以将URL更改为example.com/?i=niceItem,然后我可以简单地用javascript读取URL并将其更改回example.com/niceItem地址栏)。

到目前为止,这是我能做的最好的:

RewriteRule ^/([^\/]+)$ /index.php?i=$1 [NC,L]

这个想法是捕获第一个之后没有斜杠的请求(如example.com/niceItem),然后读取example.com/index.php?i=niceItem的文件。问题是,当我加载像example.com/niceItem 这样的页面时,页面显示i 的值与php 是什么关系;它应该是niceItem,因为链接应该是example.com/?i=niceItem,但i的值实际上是字符串index.php。不完全是我想要的。另外,我希望以下工作

RewriteRule ^/([^\/]+)$ /?i=$1 [NC,L]

但这实际上会导致内部服务器错误。

所以,问题是,为什么这些不起作用,我如何才能实现我想要实现的目标?


PS。实际上,我所说的这个网站是example.com 的子域。所以,我有映射到example.com/sub/sub.example.com,我需要像sub.example.com/itemNameexample.com/sub/itemName 一样漂亮地处理URL。正如我所提到的,只要有itemName 部分,URL 的格式就没什么大不了的。我将能够使用 javascript 读取 URL,并在页面加载后将其更改为我想要的任何内容。

【问题讨论】:

  • SIdenote,如果有人知道我的问题的适当术语,请随时提出不同的标题。我知道当前的描述性不太强,但我不确定如何更好地描述问题。

标签: .htaccess url redirect


【解决方案1】:

使用RewriteCond

如果 i 是唯一将被传递的查询参数,那么

RewriteCond "%{QUERY_STRING}" "(\?i=)(.*)$"
RewriteRule "(.*)/?$" "$1/%2"

如果您只需要提取 i 但保留其他查询参数

RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))i=([^&]*)&?(.*)&?$"
RewriteRule "(.*)/?$" "$1/%2?%1%3"

大多数框架都提供这种排序功能。如果可能,最好不要重新发明轮子。这是一个脆弱的设置,将来可能会让您头疼。

【讨论】:

  • 嗯,这只是一个小网站,我更像是一个业余爱好者,所以复杂性不是问题。此外,如果您只想要一个轮子,重新发明轮子可能不是最好的做法,但如果您想了解轮子,那么它是值得的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多