Articles of 重写

服务器记住旧的重写规则,即使我删除htaccess

我已经build立了一个Ubuntu和LAMP的开发服务器,但由于某种原因.htaccess奇怪的… 有一个网站上有一套规则,当我评论他们仍然工作,甚至当我将文件重命名为.htaccesss仍然工作! 如果我删除文件中的所有内容,它仍然可以正常工作,每当我进行更改时,重新启动Apache。 我已经尝试重新安装Apache,并重新安装重写模块,它仍然无法正常工作… 我添加的任何新规则似乎都没有任何影响,所以它正在从其他地方看到规则。 如果我通过在/ .htaccess文件中导致语法错误,我得到一个500服务器错误。 有caching规则的地方吗? 我从来没有遇到过这个问题! 编辑 :我解决了这个问题,通过在我的.htaccess文件中添加Options -Multiviews

Nginx的 – 重写和pass_proxy到另一个端口原因404找不到

试图让URL重写与端口转发工作,但似乎不起作用。 我的应用程序服务器运行在:8080端口,而nginx工作在默认的80 。 所以我不仅要重写url,还要把请求转发到另一个端口。 其实,我唯一想做的是通过它的快捷方式http://localhost/tom来查询现有资源http://localhost:8080/#/cat/tom ,而不需要任何redirect。 这是我基于nginx文档和其他问题所做的: server { listen 80; server_name localhost; root /; #charset koi8-r; #access_log logs/host.access.log main; location / { rewrite ^/([az]+)$ /#/cat/$1 break; proxy_pass http://localhost:8080; proxy_redirect off; } … } 已尝试其他configuration,但都没有工作。 当我访问http://localhost/tom它表示404 not found而http://localhost:8080/#/cat/tom按预期工作。 日志没有提到任何错误。 如何按预期强制这项工作?

RewriteRules不会停止与最后一个标志?

我似乎在使用Apache 2.2的Rewrite模块(在FreeBSD 8上运行)时遇到了麻烦。 我的.htaccess文件如下所示: Options -Indexes RewriteEngine on RewriteRule ^xpaste$ cross.php [L] RewriteRule ^x([a-f0-9]*)$ cross.php?id=$1 [L] RewriteRule ^(gen|[a-f0-9]+)$ index.php?$1 [L] RewriteRule ^(.*)$ index.php [L] 然而不知何故,最后一条规则超越了其他三条。 一旦我发表评论,其他规则按预期工作: www.mysite.com/xpaste打开“cross.php” www.mysite.com/x132633打开“cross.php?id = 132633” www.mysite.com/gen打开“index.php?gen” 我已经尝试了各种RewriteRule上的L,NS和S = n标志的各种组合,但除非我注释掉最后一条规则,否则一切都会被引导到index.php。 一旦发现匹配,我该如何让Apache停止处理RewriteRules?

重新启动后URL重写规则丢失

每次我重新启动我的服务器我的URL重写规则似乎得到重置。 每次重新创build它们显然是非常令人沮丧的! 我正在运行Windows Server 2008 R2(完全更新),IIS 7.5和IIS URL重写2.0。 有没有人有任何想法可能造成这种情况? 先谢谢你。

如何创build这种types的子域:example.test.domain.com

我设法find一个重写制作子域(我有一个通配符域指向我的服务器; *.domain.com 。 如果我去test.domain.com ,它工作得很好,横向于: /var/www/domain.com/www/test/ 如果我做example.test.domain.com ,它应该这样做: /var/www/domain.com/www/test/example/ 这是test目录中的另一个目录。 这是我发现使用的重写,但我应该如何实现在这个两个目录子域? if ($host !~* ^www\.domain\.domain$) {} if ($host ~* ^([^.]+)\.domain\.com$) { set $auto_subdomain $1; } if (-d /var/www/domain.com/www/$auto_subdomain) {} if (-f /var/www/domain.com/www/$auto_subdomain$uri) { rewrite ^(.*)$ /$auto_subdomain$uri; break; }

是否有可能重写一些查询stringHTTPS并保持一切HTTP?

我正在重写查询string到美丽的URI,例如: index.php?q=/en/contact成为/en/contact ,所有的作品很好.. # httpd.conf # HANDLE THE QUERY RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 甚至有可能重写单个查询来强制https和强制一切到http ? 我已经尝试了许多不同的方法,通常以无穷循环结束。 我可以写一个插件来做到这一点在PHP中,但认为这将是更有效的处理这在服务器conf。 我会很乐意提供任何build议。 编辑:为了澄清,我想能够重写非SSL http://example.com/index.php?q=/en/contact启用S​​SL https://example.com/en/contact并且每个不是/en/contact查询都被写入http://example.com/…

nginx url用stringreplace重写

我需要赶上,如果我的url包含一个小的substr,保持原有的url,只重写那小部分,我怎么能做到这一点? 例如: http://foobar.com/foo-bar-substrtocatch-baz 应该成为 http://foobar.com/foo-bar-changedsubstr-baz 提前致谢…

IIS反向代理不能在ASP.NET中使用Response.Redirect()

我试图设置一个反向代理,使用这里 , 这里和这里的教程。 该站点在localhost:8080上设置,反向代理使用localhost:8080/myProxy 。 处理标准链接时,一切正常。 我可以查看代理url,并按预期查看一切。 从localhost:8080/myProxy/default.aspx的链接到预期的localhost:8080/myProxy/about.aspx 。 我遇到的问题是在使用.NET Response.Redirect()情况下,URL会更改为网站的实际位置而不是代理。 即链接从localhost:8080/myproxy/default.aspx – > localhost:8080/about.aspx 。 我该如何解决这个问题? 这是我的configuration: <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" /> <rewrite> <rules> <rule name="Reverse Proxy to my site" stopProcessing="true"> <match url="^myProxy/(.*)" /> <action type="Rewrite" url="http://localhost:8080/{R:1}" /> </rule> </rules> <outboundRules> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, […]

Nginx:重写https://到http://

我试图让Nginx重写传入的请求到我的服务器前缀https://到http:// (这是因为在此站点上使用的CMS强制URI而不是相对path – 本质上打破了整个网站通过使图像,脚本和样式表不可用)。 我目前正在尝试改造由前任设置的现有指令,但是我发现自己受限于我对Nginxconfiguration语法的了解。 代码如下: if ($ssl_protocol = "") { rewrite ^ https://$http_host$request_uri? permanent; } 我目前评论这个代码来防止强制重写http://到https:// ,但是我不能在不破坏站点的情况下反转进程。 以下是我迄今为止所尝试的: if ($ssl_protocol = "https") { rewrite ^ http://$http_host$request_uri? permanent; } 和 # also tried ($ssl_protocol != "") if (!($ssl_protocol = "")) { rewrite ^ http://$http_host$request_uri? permanent; } 第一个似乎没有效果。 发送到客户端的HTML仍会生成未被重写的HTTPS请求。 第二个片段似乎也没有任何影响 – 如果我理解正确(虽然我还是有点惊讶),Nginx不支持布尔否定。 什么是最好的方式(或工作方式)做到这一点? 编辑:我试着从@ NathanC的答案添加代码; 然而,这种无条件的重写会导致redirect循环。 […]

nginx重写正则expression式的API版本

我想要的是第一个变成第二个.. /widget => /widget/index.php /widget/ => /widget/index.php /widget?act=list => /widget/index.php?act=list /widget/?act=list => /widget/index.php?act=list /widget/list => /widget/index.php?act=list /widget/v2?act=list => /widget/v2.php?act=list /widget/v2/?act=list => /widget/v2.php?act=list /widget/v2/list => /widget/v2.php?act=list v2也可以是v45,基本上是“v \ d +” 行为,在这种情况下,“列表”,可以有很多值,更多将被添加。 任何额外的查询参数将只传递$ args,我猜。 基本上URL没有指定版本将去index.php,然后可以决定什么特定的版本文件包括。 我害怕发生的是循环 – 这应该坐下来 location /widget { 对?。 (至于将API的版本放在URL中,我并不想成为RESTful,而且目标受众很less) 关于如何完全在index.php中使用“路由器”完成这些资源也欢迎: – /