Articles of 重写

如何在url中重写'%25'

我的网站软件用URL中的“+”字符replace空格字符,正确的链接看起来像“ http://www.schirmacher.de/display/INFO/How+to+reattach+a+disk+to+XenServer ”例如。 有些网站链接到这篇文章,但不知何故,他们的embedded式编辑器无法处理编码,所以我在httpd日志文件中看到的其实是 GET /display/INFO/How%2525252bto%2525252breattach%2525252ba%2525252bdisk%2525252bto%2525252bXenServer 这当然会导致404错误。 看来“+”字符被编码为“%2b”,然后“%”字符被编码为“%25” – 几次。 由于有很多这样的引用来自不同网站的不同网页,我想重写url,以便访客得到正确的页面。 这是我的尝试不起作用: RewriteRule ^(.*)%25(.*)$ $1%$2 [R=301] 它应该做的是:将%25string之前的所有内容以及所有之后的所有内容与中间的'%'连接起来,然后redirect。 用规则应该重写的示例inputURL /display/INFO/How%25252bto%2525252breattach%2525252ba%2525252bdisk%2525252bto%2525252bXenServer 其次是redirect,然后重写 /display/INFO/How%252bto%2525252breattach%2525252ba%2525252bdisk%2525252bto%2525252bXenServer 并再次 /display/INFO/How%2bto%2525252breattach%2525252ba%2525252bdisk%2525252bto%2525252bXenServer 等等。 最后,我应该离开了很多redirect之后 /display/INFO/How%2bto%2breattach%2ba%2bdisk%2bto%2bXenServer 这是一个有效的url等同于/ display / INFO / How + to +重新附加+ a +磁盘+到+ XenServer。 我的问题是,expression式根本不匹配,所以它甚至不会replace%25的单个匹配项。 我知道redirect的数量是有限制的,我真的应该使用[N]标志,但是我甚至没有正确的第一步。 本·李:谢谢你的详细解答。 我现在在这个问题上花了几个小时。 这是我发现的: 在mod_rewrite看到之前,url中的任何'%25'string都被转换为'%'。 所以RewriteRule ^(。 )%25(。 )$在url中不匹配'%25',它实际上匹配'%2525'。 反斜杠的存在并没有什么不同。 看来'%'符号在我的情况下不被解释为反向引用,也许是因为之前没有RewriteCond语句。 但是可以肯定的是,使用它可能会更好。 具有[L,R = 301]的行不正确。 它会尝试重新定向每个%2b的匹配,但是有一个允许的redirect的限制,如果有更多的redirect将会失败。 […]

为什么$ 1反向引用在没有子组的情况下重写?

我正在使用的人有一个像SVN这样的RewriteRule,如下所示: RewriteRule ^admin/ebay.*$ /yii.php/$1 [L] 我警告过他可能无法工作,因为比赛中没有对应于$ 1反向引用的子组。 它确实有用,而我感到困惑。 我很确定他的意图是以下两种情况之一: RewriteRule ^admin/ebay.*$ /yii.php/$0 [L] # $0 is whole match …要么… RewriteRule ^admin/ebay(.*)$ /yii.php/$1 [L] # $1 subgroup Apache是​​否对我从来不知道的反向引用做出假设? 为什么他的重写规则(最重要的)工作?

在Amazon S3中进行url重写

我有一个web应用程序托pipe在亚马逊S3中,web应用程序使用jQuery Mobile构build,我使用changePage在页面之间导航,当我改变页面时,我没有使用哈希运算符(#)。 当用户复制url并将其粘贴到新标签页时,我遇到了问题 例如: http://www.exampleurl.com/page1.html 加载只有jquery页面结构在amazon s3页面page1.html … 我想要的行为是加载index.html并用js读取url,检测页面并加载正确的页面。 与Apache我解决这个URL重写…但对于亚马逊S3我没有find任何类似的… 注:我知道,如果我激活哈希运算符(#)在我的url问题已解决,但我需要没有#清洁url。

Apache服务器上的.htaccess文件中RewriteRules的优先级

我的.htaccess文件中有一些RewriteRules。 但是,只有删除了另一个特定的规则才能执行一个特定的规则,而不pipe我如何订购这两个规则。 这是似乎有“低”优先级的规则: RewriteRule ^([0-9]+)$ /beta/forward.php?id=$1 [L] 这是总是优先的规则: RewriteCond %{HTTP_HOST} ^domain1\.net$ [NC] RewriteRule ^(.*)$ http://domain2.net/$1 [R=301,L] domain1和domain2实际上都指向同一个网站。 所以,只要两个规则都在.htaccess文件中,我就可以访问 http://domain1.net/123 第二个规则首先执行,我得到两个redirect,首先http://domain2.net/123 ,然后(当主机名不符合第二个规则了)到http://domain2.net/beta/ forward.php?id = 123 。 我已经尝试修复第二条规则,所以它永远不会执行的只包含数字的url,但我一定是做错了,因为它仍然得到执行: RewriteCond %{HTTP_HOST} ^ domain1\.net$ [NC] RewriteRule ^(.*[^0-9]+.*)$ http://domain2.net/$1 [R=301,L] 只有从.htaccess文件中删除两行,我才能得到第一条规则来处理请求。 任何帮助将不胜感激。

我可以在RewriteRule中做一个简单的计算吗?

网站结构的变化意味着网站需要更改 site/11-foo/21-bar 至 site/1-foo/1-bar 即我想用RewriteRule从第二个参数中的整数中减去一个常量(在本例中为10),在第三个参数中从整数中减去另一个常量(在本例中为20)。 这些简单的计算可​​以节省数百万个需要处理的301redirect。 有没有办法使用mod_rewrite做到这一点?

重写一个子目录到nginx的根目录

假设我有一个站点http://domain/并且将一些文件放在子目录/html_root/app/并使用以下重写规则将此文件夹重写为我的根目录: location / { root /html_root; index index.php index.html index.htm; # Map http://domain/x to /app/x unless there is ax in the web root. if (!-f $request_filename){ set $to_root 1$to_root; } if (!-d $request_filename){ set $to_root 2$to_root; } if ($uri !~ "app/"){ set $to_root 3$to_root; } if ($to_root = "321"){ rewrite ^/(.+)$ /app/$1; } # Map […]

这是我在IIS 7.5上的Web.Config

我GOOGLE了这一点,发现它存储在我的asp框架文件夹…但我可能知道哪个是我的具体应用程序的正确的web.config文件? 有太多的应用程序运行…我发现很多web.config 我使用窗口服务器64(所以有框架和框架64) 我的应用程序池是(应用程序名称)v4; pipe道一体化

Nginx重写除索引外的所有html文件

我在Nginx重写中遇到了一些麻烦。 我最近被博客移动到一个新的引擎,并且URL结构已经改变。 在我的旧博客引擎post位于一个forms为http://$host/yyyy/mm/title.html的URL上,但在新的引擎上,它们的格式为http://$host/yyyy/mm/title/ 。 服务器返回的实际文件位于/yyyy/mm/title/index.html 。 为了确保旧post中的链接仍然有效,我想在Nginx中进行重写,如下所示: rewrite ^/(\d\d\d\d)/(\d\d)/(.+)\.html$ $scheme://$host/$1/$2/$3/ permanent; 不幸的是,这会捕获以.html结尾的任何内容,包括index.html ,因此访问forms为/(\d\d\d\d/)/(\d\d)/(.+)/的url会导致redirect循环(nginx内部尝试使用/$1/$2/$3/index.html ,redirect到/$1/$2/$3/ ,redirect到index.html等)。 如果可能,我宁愿不使用if语句。 有任何想法吗? 为了参考该网站是静态的,我的服务器configuration看起来像这样(这里没有什么奇特的): server { listen [::]:80; server_name blog.samwhited.com; root /var/www/blog.samwhited.com; charset utf-8; location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } error_page 404 /error/404.html; error_page 403 /error/403.html; location /error/ { internal; } } 以下是预期redirect行为的一个简单示例: http://blog.samwhited.com/2008/09/test.html – > http://blog.samwhited.com/2008/08/test/ 如果可以隐藏index.html,那也是很好的。 […]

如何根据标题参数dynamic改变文件名 – nginx rewrite

我正在使用nginx web服务器提供.pdf文件。 并根据title args使用重写规则设置.pdf文件的文件名。 我想要做的是,将我的域名example.com添加到文件名中 1.如果title var包含example.com ,则使用title var数据作为文件名。 例如 URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=[example.com]ebook Filename : [example.com]ebook.pdf 2.如果title var中没有包含example.com ,则将文件名作为[example.com]title var.pdf 例如 URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=ebook Filename : [example.com]ebook.pdf 3.如果标题没有设置,则使用文件名作为[example.com]hash.pdf文件名。 例如 URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf Filename : [example.com]0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf 我怎样才能达到这样的东西。 ? 我目前的configuration看起来像这样 #pdf download block location ~* /pdf/([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]+)\.pdf$ { #if title is not set then use hash.pdf as filename […]

如何使用.htaccess不使用硬编码将非wwwredirect到www?

RewriteEngine On RewriteCond%{HTTPS}!= on RewriteCond%{HTTP_HOST} ^ www。(。+)$ [NC] RewriteRule ^(。*)$ http://%1 / $ 1 [R = 301,L] …导致一个完美的,非硬编码的301redirect从“www到非www”,会有什么相反的样子? 编辑: 根据Prix的post,我已经将.htaccess文件更改为以下内容: Options +FollowSymLinks <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] </IfModule> 如前所述,不幸的是,这个redirect到“ http://www./ ”。 谁可以帮忙? 谢谢