Articles of mod rewrite

将lighttpd转换成nginx重写规则

我努力让我的代码在nginx上工作。 这个configuration适用于lighttpd,但是我想把它迁移到nginx。 在lighttd上重写规则: url.rewrite-once = ( "^/(ui)/(.*)$" => "/gi.php/$1/$2", "/(.*)\.(.*)" => "$0", "/(xhr|js-api)/(.*)" => "$0", "^/([^.]+)$" => "/gi.php/$1" ) 任何人都可以帮助在这个转换? 我尝试了很多东西,包括将其转换为Apache重写规则,但没有一个工作。 Nginx规则: if (!-f $request_filename){ set $rule_0 1$rule_0; } if (!-d $request_filename){ set $rule_0 2$rule_0; } if ($rule_0 = "21"){ rewrite ^/(.*)$ /gi.php/$1 last; } Error : 404 有什么build议么?

结合链式重写规则来删除所有的尾部斜线

我正在使用这个规则去除所有的尾部斜杠: RewriteRule ^(.*)/////////$ $1 [N] RewriteRule ^(.*)////////$ $1 [N] RewriteRule ^(.*)///////$ $1 [N] RewriteRule ^(.*)//////$ $1 [N] RewriteRule ^(.*)/////$ $1 [N] RewriteRule ^(.*)////$ $1 [N] RewriteRule ^(.*)///$ $1 [N] RewriteRule ^(.*)//$ $1 [N] RewriteRule ^(.*)/$ $1 [L,R=301] 但301头只有在最后一条规则被触发时才会被发送。 我没有得到这些规则的组合和工作。 这RewriteRule ^(.*)/+$ $1 [R=301,L]不起作用,它看起来像它,但它会产生一个重写循环。 我需要立即删除所有的斜杠

Apache2 mod_rewriteredirect除了一个文件夹的所有文件

我需要将旧网站(www.old.com)的请求redirect到新网域(www.new.com),但我希望将旧内容保留在不同的文件夹中(www.old.com/oldsite )。 我有规则redirect所有请求,但文件夹exception似乎并没有工作: RewriteCond %{HTTP_HOST} www.old.com RewriteRule ^/old_website/(.*) $1 RewriteRule (.*) http://www.new.com/new_site_is_here.php 谢谢!

Apache的反向代理404图像错误

我有一些与我的Apache反向代理错误。 目前我正在做4个网站的反向代理。 1.1.1.1/a 1.1.1.2/b 1.1.1.3/c 1.1.1.4/d 反向代理到a和b网站时,我没有问题。 形象是好的,没有问题。 但是,当涉及到C和D的网站。 图像没有得到加载。在我的access_log,这里是日志。 – – [08/May/2014:10:40:36 +0800] "GET /whatshot_v3/images/promo/img_samplePromo.jpg HTTP/1.1" 404 1245 – – [08/May/2014:10:40:36 +0800] "GET /images_v3/menu/faq_butt_03.png HTTP/1.1" 404 1245 – – [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_planprice.gif HTTP/1.1" 404 1245 – – [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_services.gif HTTP/1.1" 404 1245 – – [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_account.gif HTTP/1.1" 404 1245 […]

子域到文件夹redirect(HTTPS)

我在我的httpd.conf底部有以下内容。 没有其他configuration完成。 NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] ServerName www.contoso.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} RewriteCond %{HTTP_HOST} !^www.* [NC] RewriteCond %{HTTP_HOST} ^stoplight.* [NC] RewriteCond %{HTTP_HOST} ^([^\.]+)\.contoso\.com RewriteCond /var/www/html/%1 -d RewriteRule (.*) https://www.contoso.com/blarg%{REQUEST_URI} </VirtualHost> NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /var/www/html ServerName www.contoso.com RewriteCond %{HTTP_HOST} !^www.* [NC] RewriteCond %{HTTP_HOST} ^stoplight.* [NC] RewriteCond %{HTTP_HOST} ^([^\.]+)\.contoso\.com […]

mod_rewrite .php的不匹配和斜杠

我试图编写一套重写规则,将静态资产的所有请求发送到我们的CDN,同时保持对服务器本地的PHP文件的请求。 我有一个适用于“匹配除.php之外的任何内容”的规则,但它也匹配网站的斜线或根目录,并将初始请求redirect到CDN。 RewriteRule !^(.*\.php)$ http://somecdn.com/$1 [NC,L,R=301] 我一直在努力使用RewriteCond来匹配斜线和.php文件,我相信我只是缺less一块。 RewriteCond {REQUEST_URI} !^/$ RewriteCond {REQUEST_URI} !^(.*\.php)$ RewriteRule ^(.*)$ http://somecdn.com/$1 [NC,L,R=301] 这是我的第一条规则,但仍然与斜线匹配。 我怎么能说:“匹配一切,但斜线和.php然后发送一切其他的CDN”?

基于HTTP_HOST的Mod重写不会改变浏览器地址

我不清楚为什么这个工作不正常。 我有sub.domain.com与其在/sub_folder内容,而sub.domain.com列出在domain.com的ServerAlias指令。 两者的DNS指向相同的IP。 在域名的虚拟主机,我也有以下重写将其发送到子域的正确的文件夹: RewriteCond %{HTTP_HOST} sub\.domain\.com RewriteRule (.*) http://domain.com/sub_folder 这工作,但我被要求,使浏览器地址不会从sub.domain.com更改为http://domain.com/sub_folder 。 我试图改变: RewriteRule (.*) /sub_folder [L] 也试过了 RewriteRule (.*) /sub_folder [PT] 两者都给错误。 我已经尝试添加index.html这两个行为没有什么区别(所以我假设目录索引照顾它)。 它看起来像第一个打破了页面的一些包含,另一个导致redirect循环。 语法是正确的,我正在尝试完成吗? RHEL 6 httpd 2.2.15

mod_alias.c规则redirect所有子目录

这里是一个mod_alias新手。 我发现重写规则下面的地方,并已经用它来阻止机器人和黑客打我的网站,寻找像HNAP1 , HNAP1 , blog等目录。 它的作品,返回一个Forbidden 403消息。 <IfModule mod_alias.c> RedirectMatch 403 /(\{\$itemURL\}|cro|HNAP1|wp|blog|)/?$ </IfModule> 但我怎么也redirect/wp/wp-admin/和/blog/wp-admin/到403消息? 和其他任何子目录,即/wp/wp-admin/subdirectory/ ?

如何使用htaccess&apache重写/ page到/ xx / page?

您好我已经find了许多mod-rewrite和Apache的资源,但我还没有成功的做一个工作的例子。 下面的例子适用于 ✓WORKS example.com/en/page1.php☞example.com/page1.php?ln=en (内部redirect) ✓WORKS example.com/page1.php☞example.com/en/page1.php (redirect) ✓WORKS example.com/en/☞example.com/index.php?ln=en (内部redirect) ✓WORKS example.com/☞example.com/en/ (redirect) ✓WORKS example.com/blahblah☞example.com/en/error.php (redirect) ✓WORKS example.com/zh/blahblah☞example.com/zh/error.php (redirect) ✖FAILS example.com/de☞example.com/en/error.php (redirect – 应该是example.com/de/ ) ✖失败example.com/de/blahblah☞example.com/en/error.php (redirect – 应该是example.com/de/error.php ) <IfModule mod_rewrite.c> RewriteEngine On DirectorySlash On # Force hostname without www REDIRECT RewriteCond %{HTTP_HOST} !^example\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^(.*)$ http://%1/$1 [R=301] # […]

Apache重写使用THE_REQUEST只重写GET请求

背景: 为了减less包含wordpress安装的git repos的回购大小,我们从回购中删除静态资产。 大部分工作已经完成,但我有一个障碍。 我已将资产重新定位到S3存储桶,并使用.htaccess RedirectPermanent,以便将本地媒体的请求redirect到s3存储桶。 这是很好的pipe理所有在一个新的地方的现有资产,而无需修改wp数据库。 但是,对于新添加的资产,我们使用“Amazon S3和Cloudfront”插件将它们上传到服务器后自动移动到同一个S3存储桶。 然而,为了工作,我需要使用THE_REQUEST将RedirectPermanent改为RewriteRule,这样只有媒体的GET请求才会指向S3存储桶。 这是因为“Amazon S3和Cloudfront”插件需要允许将文件作为caching本地上传,并从中推送到S3存储桶。 以下是我们目前在.htaccess中的内容: RedirectPermanent /media https://s3-us-west-2.amazonaws.com/bucket/media # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ – [L] RewriteRule ^assets/(.*) /wp-content/themes/theme/assets/$1 [QSA,L] RewriteRule ^plugins/(.*) /wp-content/plugins/$1 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 我对Apache Rewrite规则和条件不是很满意,在格式化比赛正则expression式方面我特别弱,而且我的专业水平和实际编写重写规则的能力也会更好。 我已经阅读了一些关于如何使用THE_REQUEST的在线示例,我知道我需要这样的东西: #there's definitely more that […]