.htaccess URL 重写挑战
Posted
技术标签:
【中文标题】.htaccess URL 重写挑战【英文标题】:.htaccess URL rewriting challenge 【发布时间】:2012-02-14 17:47:39 【问题描述】:我在某些 URL 重写方面遇到了问题。
下面的所有东西都可以正常工作,但我需要添加一个从 URLS 中删除查询字符串的规则。
site.com/page?a=b 会变成 site.com/page
有人可以帮忙吗?我在 .htaccess 上做了一些阅读,但我发现它非常复杂。另外,需要知道我的新指令应该出现在文件中的哪个位置。
谢谢。
# 缺少页面的 EE 404 页面 错误文档 404 /index.php/404/index # 丢失文件的简单 404 ErrorDocument 404“找不到文件” # 重写可能已经开启,如果没有,请取消注释 重写引擎开启 RewriteBase / # 阻止访问名称以句点开头的“隐藏”目录。这 # 包括版本控制系统使用的目录,例如 Subversion 或 Git。 重写规则 "(^|/)\." - [F] # 去掉 www - 取消注释激活 # # RewriteCond %HTTPS !=on # RewriteCond %HTTP_HOST ^www\.(.+)$ [NC] # RewriteRule ^(.*)$ http://%1/$1 [R=301,L] # # 删除没有扩展名的路径的尾部斜杠 #取消注释激活 # # 重写规则 ^(.*)/$ /$1 [R=301,L] # # 删除 index.php # 使用“包含方法” # http://expressionengine.com/wiki/Remove_index.php_From_URLs/#Include_List_Method # RewriteCond %QUERY_STRING !^(ACT=.*)$ [NC] RewriteCond %REQUEST_URI !(\.[a-zA-Z0-9]1,5)$ RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteCond %REQUEST_URI ^/(home|inc|publishers|sidebars|about|include-template|testing|advertisers|products|sitemap|style|ad-choices|social-bar|search|404||members|P[0 -9]2,8) [NC] 重写规则 (.*) /index.php/$1 [L]【问题讨论】:
只需在最后一条规则中的$1
之后添加一个?
。 RewriteRule (.*) /index.php/$1? [L]
【参考方案1】:
这将从 url 中删除查询字符串
RewriteRule ^(.*) /index.php/$1? [L] #remove query string
希望对你有帮助
【讨论】:
【参考方案2】:我的答案有点晚了,但由于我正在寻找类似的行为,我想我应该分享它:您还可以在重写规则中添加一个标志以删除查询字符串;标志是[QSD]
,它有助于避免像末尾的?
这样的变通方法;-)
Here你可以找到更多关于这个标志的信息。我想指出“此标志在 [Apache] 版本 2.4.0 及更高版本中可用”
【讨论】:
以上是关于.htaccess URL 重写挑战的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess:使用 RewriteCond 但对 IMAGES/JS/CSS 文件的hrefs仍然被不必要地重写[重复]