Articles of mod rewrite

多重规则Apache重写和标准页面

参考: 多重规则Apache重写 虽然这对多层次的项目钻取效果很好,但我仍然需要一个admin.php页面来在规则之外运行。 目前在这套规则下,标准页面/脚本不会运行。 思考/想法? RewriteRule ^mr/index.php$ – [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /mr/index.php?product_group=$1&product_family=$2&product_category=$3&product_sub_category=$4&product=$5 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /mr/index.php?product_group=$1&product_family=$2&product_category=$3&product_sub_category=$4 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /mr/index.php?product_group=$1&product_family=$2&product_category=$3 [L] RewriteRule ^([^/]*)/([^/]*)/?$ /mr/index.php?product_group=$1&product_family=$2 [L] RewriteRule ^([^/]*)/?$ /mr/index.php?product_group=$1 [L] 更新: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ – [L] RewriteRule ^index.php$ – [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ index.php?n_section=$1&n_product_group=$2&n_product_family=$3&n_product_category=$4&n_product_subcategory=$5 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ index.php?n_section=$1&n_product_group=$2&n_product_family=$3&n_product_category=$4 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ index.php?n_section=$1&n_product_group=$2&n_product_family=$3 [L] […]

为什么这个重写规则要求*。*

我想redirect任何图像的请求,这些图像的文件名以string“myimage_”开头,到另一台服务器上的子目录。 我想了解为什么以下规则不适用于我的用例。 RewriteRule ^img/app/(gi_*)$ http://images.mydomain.com/targetdir/$1 [R=301,L] 但是这个呢: RewriteRule ^img/app/(myimage_*.*)$ http://images.mydomain.com/targetdir/$1 [R=301,L]

在全局服务器configuration中使用mod_rewrite规则

问题 我试图在Apache的全局服务器configuration中制作一个mod_rewrite规则,并使其对所有虚拟主机生效。 该文件肯定表明这是完全没问题。 然而,我不能为我的生活得到任何实际上重写。 即使使用如下简单麻烦的configuration: LoadModule rewrite_module modules/mod_rewrite.so RewriteEngine On RewriteRule .* https://www.google.com 但是,如果我将上面的代码移到其中一个虚拟服务器上,它就可以正常工作。 (对于那个域名)但是我想把这个input到服务器configuration中,并且让它对每个托pipe网站都有效。 这实际上是可能的吗? 我错过了一些细节? 除此之外,是否有一个很好的方法来排查可能出现的问题? 背景: 我试图做一个503维护页面在系统中断期间使用。 目前,我通过mod_alias和RedirectMatch规则来做到这一点。 RedirectMatch 503 ^((?!^(/error/503_error.html)|(/images/503_error.jpg)$).)*$在服务器configuration(httpd.conf)中生活得很好,适用于所有虚拟主机启用时。 我正在寻找replace这个mod_rewrite,所以我可以豁免一些内部的IPredirect。 从本质上说,系统可以在内部进行testing,而不会使其他人都可以使用。 目前运行完整的最新的RHEL 5.10与股票Apache 2.2.3。

使用CodeIgniter应用程序和traq问题跟踪器在站点上configuration.htaccess

我有这个网站在CodeIgniter上运行,我已经安装Traq问题跟踪。 在public_html我有我的应用程序和系统目录以及一个资产目录,以及traq。 即: public_html ├── application ├── assets ├── system └── traq 当我访问http://mywebpage.com/traq时,我的页面正常工作,以及traq的第一个login屏幕。 当我访问traq中的任何其他页面,它不工作,它redirect到codeigniter,并给我404。例如,当我login它试图去http://mywebpage.com/traq/login和404失败。 这是我的.htaccess文件。 有人可以修复它,或至less指出我在正确的方向吗? <IfModule mod_rewrite.c> RewriteEngine On #RewriteBase / RewriteCond %{REQUEST_URI} ^ci_app.* RewriteRule ^(.*)$ index.php?/$1 [L] RewriteCond %{REQUEST_URI} ^traq.* RewriteRule ^traq(.*)$ traq/index.php/$1 [L] RewriteCond $1 !^(index\.php|humans\.txt|robots\.txt|assets|traq) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> <IfModule !mod_rewrite.c> ErrorDocument 404 /index.php […]

从Apache 2.4迁移到Apache 2.2时出现mod_rewrite错误

我有一个存储在我的网站的.htaccess文件中的重写规则列表,重写URL http://example.com/cloud/something到http://example.com/cloud/index.php?page=something 。 当我在Apache 2.4.7服务器上时,这些规则是完美的,但是我现在正在使用Apache 2.2.22(不是我的select)工作,出于某种原因,这些规则不起作用。 htaccess文件: RewriteEngine On RewriteBase /cloud/ RewriteCond %{THE_REQUEST} \ /+cloud/(?:index\.php|)\?page=([^&]+)/(&|\ |$) RewriteRule ^ %1/ [L,R] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php?page=$1 [L,QSA] 每当我试图访问一个页面,其明确的URL( index.php?page=something ),它正在工作,但试图简短的方式导致404 Page Not Found响应。 我检查了Apache的error.log文件,看到每当我尝试访问这些URL之一时,都会出现一个新的错误: [error] [client 10.0.0.90] Negotiation: discovered file(s) matching request: /var/www/cloud/settings (None could be negotiated) 可能是什么问题? 为什么它不工作?

如果在文件夹中不存在文件,如何从根重写URI?

我有一个不在我的文档根目录的static文件夹。 我想redirect所有不存在于文档根目录但存在于静态文件夹中的文件。 (所以如果同一文件在两个地方,那么不在静态的文件将首先被提供。)我该怎么做? 以下不起作用: DocumentRoot /srv/app/client/build/ Alias / /srv/app/client/static RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/ RewriteRule ^(.*)$ /$1 <Location /> Order allow,deny Allow from all </Location>

将mod_rewrite内容从.htaccess移动到apache2.conf

将这个mod_rewrite代码从目录中的.htaccess移到apache2.conf后,它不再工作 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L,NS] 错误 错误的请求 您的浏览器发送了此服务器无法理解的请求。

如何从Apache2的redirect中排除域

我有一个这样的服务器上的redirect设置: <IfModule mod_rewrite.c> RewriteEngine On #redirect all port 80 traffic to 443 RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] </IfModule> 现在我想排除一个域名,我似乎无法解决… 这是我试过的: <IfModule mod_rewrite.c> RewriteEngine On #redirect all port 80 traffic to 443 RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST) !example.com RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] </IfModule> 不过,它仍然会将http://example.comredirect到https://example.com 。 我究竟做错了什么? PS。 我在其他浏览器尝试,所以浏览器caching不应该是一个问题。

Apacheredirect – 让我们encryptionSSL证书redirect到裸域,而不是www

我最近build立了一个运行在Wordpress上的新网站,它运行的非常好。 因为我想为网站获得一个SSL证书,所以我想我会使用Let's Encrypt,因为我已经听到很多关于它的好消息。 那么我不得不同意花了30秒让SSL在我的域上工作,但有一个小问题。 我们encryption已经设置了以下规则: http://domain.com – > https://domain.com (失败) http://www.domain.com – > https://www.domain.com (作品) 该证书只适用于www.domain.com这是令人讨厌的。 在过去,我购买的所有SSL证书在SSL证书中都包含domain.com和www.domain.com。 不知道在获取Let's Encrypt证书时是否做错了,但事实就是如此。 我所需要做的就是改变事情,以便http://domain.comredirect到https://www.domain.com 。 但是因为我是Apache新手,所以不知道该怎么做。 我在.htaccess文件中有下面的redirect规则,但似乎没有帮助,因为Apache似乎在请求到达.htaccess文件中的重写规则之前redirect。 这是规则: RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 所以我很困扰这个特殊的问题。 该网站正确地从domain.comredirect到www.domain.com之前我添加SSL证书,所以它似乎是让我们encryption自动化安装,我找不到它。 这是重写规则让我们的encryption添加到我的Apacheconfiguration文件: RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent] 我认为这与上面的线有关,但我不知道是什么。 任何帮助,将不胜感激。

redirect到apache上的客户端子文件夹

我正在我的Web应用程序中托pipe几个小型客户端页面。 基本上,他们都是我写的Web应用程序的实例,为不同的客户端。 我正在用capistrano进行部署,所以每次部署新版本时,都会部署到客户端目录的“当前”子目录中。 因此,对于名为client-name的客户client-name ,它将部署到/var/www/deployments/client-name/current/ (实际上,这是发布的符号链接,但这不重要)。 我的web应用程序要求应用程序的“根”指向/main子目录。 基本上,我的问题是这样的: 我的根域是client.example.com 。 我想要做的是能够redirect一个请求types的浏览器,使http://client.example.com/client-name/something实际上指向http://client.example.com/client-name/current/main/something ,其中client-name是可变的(对于我来说,枚举太多了,尽pipe肯定less于100)。 理想情况下,这可以在不改变地址栏中的位置的情况下完成。 我觉得这是一个非常简单的Apache mod_rewrite使用,但我似乎无法find一个我正在寻找的例子。 我将不胜感激,如果有人可以帮我,因为mod_rewrite让我的头受伤。 ;)