我们有一些非常基本的mod_rewrite规则:
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
Run Code Online (Sandbox Code Playgroud)
mod_rewrite似乎完成了它的工作,如果用户正在访问:
something.swf?param=value,它被正确地重定向到 http://www.newdomain.com/something.swf?param=value
问题出在这种情况:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
最终发生的事情是mod_rewrite将它自己重新编码查询字符串参数
所以用户最终得到的是:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
重定向
www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE
Run Code Online (Sandbox Code Playgroud)
所以我们最终得到一个双urlencoded值.boourns!
虽然我明白我们可以制定一个\?(.*)...... ?$1规则,但我认为必须有一种方法告诉mod_rewrite不要urlencode查询字符串参数...我们希望避免使用2条规则,因为有效路径是:
something.swf (no query string)
Run Code Online (Sandbox Code Playgroud)
和
something.swf?someparams...
Run Code Online (Sandbox Code Playgroud)
所以是的,理想情况下......告诉mod_rewrite:请不要查询字符串参数的urlencoding ...只需通过直接传递到新的URL R=302.
这对许多人来说似乎不是问题(读:我找不到答案),但我想更新以下htaccess代码,不仅要从URL中删除'www',还要删除任何子代码访问的目录.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
有了这个,http://www.example.com/any/解决得很好,但是我希望它像root一样重定向到http://example.com/any/.
我正在努力学习一些.htaccess技巧.我遇到了RewriteBase指令,但无法让它正常工作.
我想知道这个指令具体是什么以及如何使用它.RewriteBase在StackOverflow和Apache文档中已经有过一些讨论但仍然无法得到我的问题的明确答案.
有人可以告诉我一个简单但有效的例子RewriteBase吗?
假设我有带有查询字符串参数的URL,如下所示:
/index.php?book=DesignPatterns&page=139
/index.php?book=Refactoring&page=285
Run Code Online (Sandbox Code Playgroud)
使用mod_rewrite,如何将它们重定向到这些SES URL?
/DesignPatterns/139
/Refactoring/285
Run Code Online (Sandbox Code Playgroud) 如果我理解正确,我需要放入一些东西httpd.config来启用mod_rewrite.如果这是真的,我需要什么就摆在httpd.conf或apache.conf?请具体操作系统.
如果URL 与"论坛"路径不匹配,我该如何执行规则?
例如:
RewriteCond IF URL IS NOT forums
RewriteRule !\.(js|gif|css|jpg|png)$ %{DOCUMENT_ROOT}/index.php [L]
Run Code Online (Sandbox Code Playgroud) 我不得不更新我的.htaccess:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
对此:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
让它在AWS Elasic负载均衡器后面工作.
这一切似乎在AWS上运行良好,但在我的本地环境中,我陷入了重定向循环.
如何让这个设置在两种环境中正常工作?
我的.htaccess中有以下命令
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
Run Code Online (Sandbox Code Playgroud)
%2在第二行和后续行中不起作用.我可以为%2定义任何变量并在所有RewriteRule命令中使用它吗?以下命令有效
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
Run Code Online (Sandbox Code Playgroud)
但是我希望在没有重复条件的情况下将%2用于多个规则行.
我php.ini在Apache上安装了rewrite_module并进行了修改.
我创建rewrite.php和.htaccess文件,但它不起作用.
/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php
Run Code Online (Sandbox Code Playgroud)
$ cat /var/www/html/test/.htaccess
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
Run Code Online (Sandbox Code Playgroud)
$ cat /var/www/html/test/rewrite.php
<html>
<h2 align=center>
<?php
// mod_rewrite Test Page
// Copyright 2006 Webune.com
if($_GET['link']==1){echo"You are not using mod_rewrite";}
elseif($_GET['link']==2){echo"Congratulations!! You are using Apache mod_rewrite";}
else{echo"Linux Apache mod_rewrte Test Tutorial";}
?>
</h2>
<hr>
<head>
<title>How To Test mod_rewrite in Apache Linux Server</title>
</head>
<body>
<p align="center">by <a href="http://www.webune.com">Webune</a></p>
<p><a href="rewrite.php?link=1">LINK1</a> = rewrite.php?link=1</p>
<p><a href="link2.html">LINK2</a> = …Run Code Online (Sandbox Code Playgroud) 我将symfony2项目上传到服务器树丛.主页面加载,但所有链接都被破坏.我尝试将app.php添加到网址中.它确实有效,但是:
我有这样的路线:
www.something.com/app.php/something
我希望他们是:
www.something.com/something.
我一直在阅读,我应该在.htaccess上加上一些重写规则.
我发现了这些规则,但它们似乎不起作用:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud) mod-rewrite ×10
apache ×7
.htaccess ×5
no-www ×1
php ×1
query-string ×1
redirect ×1
regex ×1
symfony ×1
url ×1