.htaccess 还有一个重写规则的问题:向所有URI添加一个参数而不更改它们
我想重写.htaccess 还有一个重写规则的问题:向所有URI添加一个参数而不更改它们,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我想重写 www.mydomain.com/www/whatever.php 到 www.mydomain.com/www/whatever.php?hl=EN 尽管.php不是固定的,但它表示www目录中的任何php页面 我的htaccess目前看起来是这样的: RewriteEngine on RewriteCond %{REQUEST_URI} !hl= RewriteRule ^(.+)$ $1?hl=EN [QSA,R=301,L] 但出于某些原因,它会将每个页面的实际硬盘路
- www.mydomain.com/www/whatever.php
- www.mydomain.com/www/whatever.php?hl=EN
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
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
假设所有字符串都是固定的,除了任何内容
对于静默映射,将[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]
我想你的条件应该检查%{QUERY\u STRING}而不是REQUEST\u URI。我不知道你所说的硬盘URL是什么意思。您能指定原始URL和它重定向到的URL吗?我添加了详细信息,并更正了
{QUERY\u STRING}
的问题。RewriteRule中的正则表达式匹配将只匹配请求URI部分(例如/my/little/pony/index.php)。你工作的环境怎么样?本地主机?使用URL中的文件系统路径直接访问文件?我也是这么想的…重写库是如何定义的?它工作正常,谢谢!!还有一件事,url被重定向了,但我看不到url中添加的参数,即使删除了R=301。你知道我怎么能把hl参数当作GET参数放在url中吗?另外,rewritebase是可选的,没有必要。我不明白h1-EN是如何将hl=EN添加到url的,有任何相关文档吗?首先,让我了解发生了什么。替换URL是这样的http://www.mydomain.com/www/whatever.php?hl=EN
如我的答案所示,还是遗漏了什么?@Sebas没错。脚本存在,因此条件RewriteCond%{REQUEST\u FILENAME}-f
不应该在那里。很高兴我能帮上忙。