因此,我试图使我的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
的页面时,该页面显示php中i
的值。它应该是niceItem
,因为链接应该是example.com/?i=niceItem
,但是i
的值实际上是字符串index.php
。不完全是我想要的。另外,我希望以下内容能正常工作
RewriteRule ^/([^\/]+)$ /?i=$1 [NC,L]
但这实际上会导致内部服务器错误。
所以,问题是,为什么这些方法不起作用,我将如何实现我试图实现的目标?
example.com
的子域。因此,我有sub.example.com
映射到example.com/sub/
,并且我需要像sub.example.com/itemName
或example.com/sub/itemName
这样的URL进行美化。正如我提到的,只要其中有itemName
部分,URL的格式就没什么大不了的。页面加载后,我将能够使用javascript读取URL并将其更改为所需的任何内容。
答案 0 :(得分:1)
如果 i 是唯一要传递的查询参数,则
RewriteCond "%{QUERY_STRING}" "(\?i=)(.*)$"
RewriteRule "(.*)/?$" "$1/%2"
如果您只需要提取 i ,但保留其他查询参数
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))i=([^&]*)&?(.*)&?$"
RewriteRule "(.*)/?$" "$1/%2?%1%3"
大多数每个框架都提供这种排序功能。最好不要在可能的情况下重新发明轮子。这是一个脆弱的设置,将来可能会引起您的头痛。