【问题标题】:yet another rewriterule issue: adding a parameter to all URI without changing them另一个重写问题:向所有 URI 添加参数而不更改它们
【发布时间】:2013-02-19 23:08:29
【问题描述】:

我想重写

  • www.mydomain.com/www/whatever.php

  • www.mydomain.com/www/whatever.php?hl=EN

whatever.php 不固定,它代表www目录下的任何php页面。

我的 htaccess 现在看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_URI} !hl=
RewriteRule ^(.+)$ $1?hl=EN [QSA,R=301,L]

但由于某种原因,它会将每个页面的真实硬盘路径添加到 www.mydomain.com,例如:

  • 127.0.0.1:8080/index.php

变成

  • 127.0.0.1:8080/D:/mypath/index.php?hl=EN

我一定是在这里做错了什么,你知道吗?

【问题讨论】:

  • 我认为你的情况应该检查 %{QUERY_STRING} 而不是 REQUEST_URI。我不确定硬盘驱动器 URL 是什么意思。你能指定原始 URL 和它被重定向到的 URL 吗?
  • 我添加了详细信息,并更正了 {QUERY_STRING} 的事情
  • 奇怪。 RewriteRule 中的正则表达式匹配只会匹配 REQUEST_URI 部分(例如 /my/little/pony/index.php)。你工作的环境如何?本地主机?直接用 URL 中的文件系统路径访问文件?
  • 我也是这么想的……
  • 你的 RewriteBase 是如何定义的?

标签: .htaccess mod-rewrite


【解决方案1】:

你可以试试这个:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  ^/(www/[^.]+\.php)/? [NC]
RewriteRule .*         %1?h1-EN             [R=301,L]

永久重定向

http://www.mydomain.com/www/whatever.php 带或不带斜杠

收件人:

http://www.mydomain.com/www/whatever.php?hl=EN

假定所有字符串都是固定的,whatever 除外。

对于静默映射,将[R=301,L] 替换为[L]


从 SO 编辑:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !hl=
RewriteCond %{REQUEST_URI}  ^/(www/[^.]+\.php)/? [NC]
RewriteRule .*         %1?hl=EN             [R=301,L]

成功了,谢谢

【讨论】:

  • 成功了,谢谢!!还有一件事,url 被重定向,但我无法看到 url 中添加的参数,即使删除了 R=301 也是如此。你知道我怎么能在 url 中有 hl 参数,就好像它是一个 GET 参数一样?
  • 另外,rewritebase 是可选的,没有必要
  • 我不明白 h1-EN 是如何将 hl=EN 添加到 url 中的,有没有相关文档?
  • 首先,让我了解发生了什么。替换 URL 是像我的答案中的 http://www.mydomain.com/www/whatever.php?hl=EN 还是缺少什​​么?
  • @Sebas 没错。该脚本存在,因此条件RewriteCond %{REQUEST_FILENAME} !-f 不应该存在。很高兴我能帮上忙。
猜你喜欢
  • 2013-01-22
  • 1970-01-01
  • 2023-03-09
  • 2019-01-16
  • 2019-04-30
  • 2017-01-21
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
相关资源
最近更新 更多