mod_rewrite有两个主要问题:
1)当我有一个无效的规则时,没有报告有意义的错误

2)为了可靠地测试每个修改,我必须擦除chrome的缓存.这不是火箭科学,但我必须按Ctrl + Shift + Delete然后单击确定,然后关闭窗口,然后重新加载.
我想看看是否有任何大师愿意分享他们的秘密来有效地管理mod_rewrite代码.
"漂亮的链接"是一个经常被要求的主题,但它很少被完全解释.mod_rewrite是制作"漂亮链接"的一种方法,但它很复杂,其语法非常简洁,难以理解,文档假定HTTP具有一定程度的熟练程度.有人可以用简单的术语解释"漂亮的链接"是如何工作的以及如何使用mod_rewrite来创建它们?
其他常见名称,别名,干净网址术语:RESTful URL,用户友好的URL,SEO友好的URL,Slugging,MVC url(可能用词不当)
如何.html从静态页面的URL中删除?
此外,我需要将任何网址重定向到没有网址的网址.html.(即www.example.com/page.html到www.example.com/page).
%1和$1.htaccess有什么区别?
例如,
# to remove www
RewriteCond %{HTTP_HOST} ^(\w+)\.mydomain\.com [NC]
RewriteRule .* http://mydomain.com/%1 [R=301,L]
# versus
# RewriteRule .* http://mydomain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
我一直在使用Dave Child的.htaccess备忘单和Jackol的.htaccess备忘单以及Apache mod_rewrite docs但是额外的帮助会很棒.
我是一个自学成才的编码员,我喜欢通过回应可疑变量和评论代码进行调试.
最近,我必须了解更多关于.htaccess文件的信息.我需要它来做像解释php脚本为php5,url重写,限制文件上传大小等....我在调试.htaccess文件时遇到很多麻烦.我经常要将PHP应用程序从一个共享托管环境迁移到另一个托管环境.有时这会破坏.htaccess文件(或者更确切地说,.htaccess文件中的某些内容会破坏网站).我检查以确保更新域名.
有没有流行的调试.htaccess文件的技术?它只是看看apache日志?还要别的吗?
我想知道如何创建和调试这种脚本,如果你不习惯写它们(比如我),它会变得有点头疼.
你用工具来创造它们吗?
调试正在进行的任何提示,而不仅仅是创建一个本地结构,看看浏览器中发生了什么?
我知道这听起来像其他许多问题,但我似乎无法找到答案.
说你在:www.domain.com/folderA/folder2/folder3/
我想将其重定向到:www.domain.com/folderB/folder2/folder3/
所以整个结构保持不变..它只是重定向.到目前为止,我有:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/folderA [NC]
RewriteRule ^(.*)$ /folderB/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,它只会做www.domain.com/folderB/folderA/folder2/folder3/
我究竟做错了什么?我如何摆脱该文件夹A?
这是一个"问自己一个问题并自己回答"的案例,我发帖是为了任何有同样问题的人的利益.
我在共享服务器上的.htaccess文件中调试mod_rewrite规则集时遇到了一些问题,我甚至无法访问Apache错误日志.我发现了一种调试它们的简洁方法,这是:
编写一个简短的脚本,只打印出它的查询字符串变量.例如在PHP中:
<?='<pre>',htmlentities(print_r($_GET,true)),'</pre>'?>
Run Code Online (Sandbox Code Playgroud)
是你所需要的全部.
假设您将此脚本命名为"show.php"并将其放在/ public_html中.然后在.htaccess文件中,确定您认为可能导致问题的规则集中的点,并插入此规则:
RewriteRule (.*) /show.php?url=$1 [END]
Run Code Online (Sandbox Code Playgroud)效果与在常规程序中插入PRINT语句相同.它会让你知道(a)你到达了规则集中的那一点,以及(b)当前重写的URL是什么.
它不像真正的调试工具那样闪存,但它完成了工作.
如果您使用的是Apache <2.3.9,则必须使用[L]而不是[END].在这种情况下,需要注意的是您的规则集不应该尝试将"/show.php"重写为其他任何内容.如果这是一个问题,您可以通过在顶部添加此规则来修复它:
RewriteRule ^show.php$ - [L]
Run Code Online (Sandbox Code Playgroud)
...只需记住在完成调试后将其删除!
我需要将所有https请求重定向到http,例如,如果有人访问https://www.example.com/another-page/,请访问http://www.example.com/another-page/
我现在在web.config中有以下重写规则,但它无法正常工作.它将https://www.example.com/another-page/重定向到https://www.example.com/,所以到了网站的根目录,但我希望重定向保留在同一个网址中将https重写为http.
<rule name="Redirect to HTTP" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{R:1}" pattern="^onepage/(.*)$" negate="true" />
<add input="{HTTPS}" pattern="^ON$" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>
Run Code Online (Sandbox Code Playgroud)
任何有关更改上述规则的帮助,以便它只将https更改为http,但保持访问的完整网址将非常感谢!
我的软件支持多个域名,所有域名都指向服务器上的同一目录(当然每个数据库都有不同的数据库).所以这些领域......
www.example1.com
www.example2.com
www.example3.com
Run Code Online (Sandbox Code Playgroud)
......都指向......
/public_html/
Run Code Online (Sandbox Code Playgroud)
在图像目录中......
/public_html/images/
Run Code Online (Sandbox Code Playgroud)
我的目录与每个网站的主机名完全匹配:
/public_html/images/www.example1.com/
/public_html/images/www.example2.com/
/public_html/images/www.example3.com/
Run Code Online (Sandbox Code Playgroud)
我正在尝试让Apache重写请求,这样如果你直接查看图像并查看地址栏,你只能看到一次主机名.
所以请求......
http://www.example1.com/images/book.png
Run Code Online (Sandbox Code Playgroud)
...是由Apache提取的......
/public_html/images/www.example1.com/book.png
Run Code Online (Sandbox Code Playgroud)
我尝试过但在不同情况下取得成功的其中一件事情如下,但在这种情况下不起作用:
RewriteRule ^[^/]*/images(.+) images/%{HTTP_HOST}/$1
Run Code Online (Sandbox Code Playgroud) .htaccess ×8
mod-rewrite ×6
apache ×5
debugging ×3
friendly-url ×1
html ×1
iis ×1
redirect ×1
web-config ×1