Articles of mod rewrite

将规则HTTPS重写到不同的端口

我有一个运行在444端口上的SSL。 我需要重写所有URL /请求开始https://服务器名称 (这是默认端口443)到https://服务器名称:444 。 我有这样的规则.htaccess: RewriteCond%{SERVER_PORT} = 443 RewriteRule ^(。*)$ https://% {SERVER_NAME}:444%{REQUEST_URI} 这不起作用。 要检查条件,我改变了条件的端口为RewriteCond %{SERVER_PORT} = 80 ,所有HTTP请求都被强制为HTTPS。

Apache重写或redirect?

我想将http://site.com/redirect到http://site.com/url 。 什么是最简单的方法来做到这一点? 我试着编辑httpd.conf和redirect命令。 它没有奏效。 此外,我尝试使用重写命令启用站点上的文件。 另外,它没有工作。 启用网站的示例configuration: RewriteEngine On RewriteRule /.* http://site.com/url [R]

懒惰的条件规则没有做任何事情! 为什么?

我正在重写PHP生成的缩略图与iglyurl到好的。 而不是img.php?src=bla.jpg&w=200&h=100静态文件名IMG-file_w200_h100.jpg 因为重写过程非常复杂,涉及到很多变化,所以只有从IMG开始的URL才能听取重写规则。 然而,有条件的第一条规则似乎不起作用:如果我将其更改为IMF或其他东西,它仍会触发重写规则! 任何想法,为什么条件不起作用? # Rewrite imgcpu?src= thumbnail maker to nice static urls RewriteCond %{REQUEST_URI} ^IMG.*$ RewriteRule ^IMG-(.+)_w(.+)_h(.+)_f(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&f=$4 [L] RewriteRule ^IMG-(.+)_w(.+)_q(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&q=$3 [L] etc

Apache服务器重写规则:如何避免“隐式强制redirect(rc = 302)”?

我有一个非常恼人的问题: 我们的networking服务器处理2(实际上更多,但让我们来说一个更简单的例子): pretassur.fr pretassuragentimmobilier.fr 这是我想要做的:改变 (whatever1).pretassuragentimmobilier.fr(/whatever2) 至 (whatever1).pretassur.fr(/whatever2)?theme=agentimmobilier 所以这是我的重写: RewriteCond %{SERVER_NAME} (([az]+\.)*)pretassuragentimmobilier.(fr|com) RewriteRule ^(.+) http://%1pretassur.fr$1 [E=THEME:pretassur_agent,QSA] # if THEME not empty, set it : RewriteCond %{ENV:THEME} ^(.+)$ RewriteRule (.*) $1?IDP=%{ENV:THEME} [QSA] 大(巨大)的问题是:让我们来看看重写日志: [pretassurmandataireimmo.com] (5) => setting env variable 'THEME' to 'pretassur_mandataire' [pretassurmandataireimmo.com] => (2) implicitly forcing redirect (rc=302) with http://pretassur.fr/ Aaaaaaaaarg! “隐式强制redirect”=>我不要那个! 我想在内部redirect到pretassur.fr,而不是做一个真正的redirect! 现在,如果你input: http […]

将重写放入Apache中的目录上下文时出现无限循环

我想将www.example.com/fooredirect到www.example.com/bar/index.php/foo 所以我有规则(mod_rewrite) <Location /> RewriteEngine on RewriteRule /(.*) /bar/index.php/$1 [L] </Location> 这个configuration造成无限循环,如何解决? 谢谢。

Web内部别名.htaccess内的别名

TL; DR:有没有办法让域的子目录http://company.com/subdir指向web根目录之外的目录,只使用.htaccess而不能访问服务器的configuration? 我有一个web站点company.com ,它在一个共享托pipe软件包(Apache 2,PHP 5)上运行CMS的三个特定于国家的副本。 CMS分为两个目录: /app <—– Non-public content, to be placed outside the web root /htdocs <—– Public content 我希望将三个国家/地区的CMS中的每一个作为主域的子目录: www.company.com/de/ <– 1st copy www.company.com/ch/ <– 2nd copy www.company.com/at/ <– 3rd copy 这个结构的明显问题是,每个CMS的/app目录需要放在Web根目录之外的一个单独的位置。 但是,出于维护的原因(我将我的项目传递给另一家公司),我想阻止这一点。 对我来说,理想的解决scheme是将CMS的每个副本都驻留在Web根目录之外的目录中: /htdocs <——- public web root /de/app /de/htdocs /ch/app /ch/htdocs /at/app /at/htdocs 从而确保app目录不能从外部访问。 每个CMS的公共htdocs目录都将使用Alias指令有select性地提供给世界: Alias /de ../de/htdocs Alias […]

通过IP阻止特定的URL(通过mod-rewrite创build的URL)

我们需要阻止任何不在本地IP的人(没有192.168 。地址的人) 但是我们不能使用apache的 <Directory /var/www/foo/bar> Order allow,deny Allow from 192.168 </Directory> <Files /var/www/foo/bar> Order allow,deny Allow from 192.168 <Files> 由于这些将阻止特定的文件或目录,我们需要阻止由mod-rewrite创build的特定URL,并且使用PHPdynamic创build页面。 任何想法将不胜感激

为什么两个模式(/.*)和(。*)匹配不同的string?

两个模式(/.*)和(.*)匹配相同的string吗? 我真正的问题是:“abc”去哪了? 东西似乎在mod_rewrite引擎内发生 在www/dir/给出这个.htaccess文件: Options +FollowSymlinks RewriteEngine on RewriteRule (/.*) print_url_args.php?result=$1 对http://localhost/dir/abc/123 /的请求会导致: 结果($ 1)=“/ 123 /” $ _REQUEST_URI =“/ dir / abc / 123 /” 如果从RewriteRule (.*) print_url_args.php?result=$1 1http:// localhost / dir / abc / 123/1的相同请求导致: 结果($ 1)=“print_url_args.php” $ _REQUEST_URI =“/ dir / abc / 123 /” 更新:张贴重写日志。 127.0.0.1 – – [15 / Feb […]

域没有得到解决没有www。 尽pipe适当的Apache设置和DNSlogging

我意识到这个问题已经在论坛上被问过很多次了,但是我已经排除了所有常见的嫌疑犯,但是我仍然没有很好的解决这个问题。 www.mydomain.net工作正常,但mydomain.net带我到Apachetesting页面。 这是我的DNS条目 A mydomain.net 123.456.244.456 CNAME www.mydomain.net mydomain.net 这里是我的apacheconfiguration: ServerName www.mydomain.net ServerAlias mydomain.net RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.mydomain\.net [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/(.*) http://www.mydomain.net/$1 [L,R] 直接从Apache文档复制。 有趣的是,mydomain.net总是去apachetesting页面。 无论我是否使其成为ServerName或ServerAlias。

如何从REQUEST_FILENAME去除尾随斜线以便在重写条件下进行比较?

如果我请求页面http://www.mysite.com/frogs/并使用这些重写规则: # See if the requested URL is in our cache. If so, serve it RewriteCond /var/www/cache%{REQUEST_FILENAME}.html -f RewriteRule (.*) /var/www/cache/$1.html [L,QSA] Apache试图find一个名为“frogs / .html”的文件,这当然会失败。 我想使用%{REQUEST_FILENAME},而不使用结尾的斜杠,以便它查找并提供“frogs.html”。 我怎样才能做到这一点?