Questions tagged «mod-rewrite»

Apache Web服务器的URL重写模块

2
重定向SSL而不发出警报
客户端仅对域的www.site.com版本具有SSL证书,而对site.com没有SSL证书。 通过mod_rewrite重定向常规HTTP并不是问题。 但是,这种方法对于我们来说对于HTTPS似乎失败了。 我们希望将https://site.com请求重定向到https://www.site.com。 是否可以在浏览器中不发出无效证书警告或获取通配符证书的情况下完成此操作?

4
为什么.htaccess重定向在http中起作用但在https中不起作用?
我有一个简单的.htaccess文件,该文件在该网站的http版本上很好用,但是在访问https时却无法使用。为什么? RewriteEngine on #This is so if the file exists then use the file RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ %{REQUEST_FILENAME} [L] #These conditions check if a file or folder exists just for reference #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d #if someone adds ".php" to the slug get rid of it …

3
Apache:在哪里检查重定向日志?
我有复杂的RewriteCond和RewriteRule在一台机器。并且根据这些规则,某些请求将被重定向到另一台计算机。 那么,是否有任何Apache日志清楚地显示了重定向的过程?因为重定向以我意想不到的方式发生。


1
HSTS和双重重定向
我在共享托管LAMP环境中管理一个小网站:这基本上意味着我唯一可以编辑的就是htaccess文件。 我想添加HSTS支持(确实做到了),但是,当我在此处测试我的网站的HSTS预加载资格时,出现以下错误: 错误:HTTP首先重定向到www http://example(HTTP)应该立即重定向到https://example(HTTPS),然后再添加www子域。现在,第一个重定向是到https://www.example.。需要额外的重定向,以确保任何支持HSTS的浏览器都将记录顶级域的HSTS条目,而不仅仅是子域。 因此,我想应该以这种方式重定向用户: http://example (这是用户在浏览器的地址栏中输入的内容) https://example (我们将他重定向到网站的HTTPS版本) https://www.example (我们再次将他重定向到子域www) 我当前的重定向是通过以下方式完成的: RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 我尝试通过以下方式在最后一行之前添加重定向: RewriteRule ^(.*)$ https://example.com/$1 [R,L] 但我从浏览器中收到“页面无法正确重定向”错误。 那么,将用户从网站的http版本重定向到https并最终通过www重定向到https的正确方法是什么?并且:有任何风险吗?

2
为什么在.htaccess中启用重写日志不起作用?
我想启用重写日志记录,以便可以调试重写规则,但是添加RewriteLog指令会导致500错误。 版本信息: Ubuntu 14.04 Server version: Apache/2.4.12 (Ubuntu) Server built: Feb 4 2015 14:22:06 内容 .htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteLog /var/log/apache2/rewrite.log RewriteLogLevel 5 RewriteBase / RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 在错误日志中,我看到: /var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', …

1
在Tomcat前面使用Apache进行SSL设置
我试图用SSl设置Apache并将SSL请求代理到我的tomcat实例。我认为我已使SSL正常工作,但仍然显示错误: Bad Gateway The proxy server received an invalid response from an upstream server. * SSL虚拟主机* LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost _default_:443> SSLEngine On SSLProxyEngine On DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/" SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL ServerName www.learn2gether.rubel.rub.de ServerAlias learn2gether.rubel.rub.de #RewriteRule ^\/$ /Learn2Gether/index.html …

2
使用mod_rewrite强制HTTPS,包括代理SSL
我有一台服务器从SSL终止负载均衡器获取一些流量-在这种情况下,它以HTTP的形式通过端口80传入,并带有http_x_forwarded_proto=“ https” 我想要只允许直接HTTPS流量或转发的HTTPS流量的mod_rewrite规则。 到目前为止,我有: RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{HTTP:http_x_forwarded_proto} != https RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 但我越来越 RewriteCond:错误的标志分隔符 错误。 我需要纠正什么才能使它正常工作,这是最好的方法吗?

3
“永久重定向”与mod_rewrite RewriteRule之间的区别
这是Apache httpd 2.2服务器。 我们要求通过HTTPS加密对此Web服务器的访问。 当Web客户端通过http://www.example.org/ $ foo(端口80)访问我的网站时,我想将其请求重定向到https://www.example.org/$foo的HTTPS加密网站。 似乎有两种常见的方法可以做到这一点: 第一种方法使用mod_alias中的“ Redirect ”指令: <VirtualHost *:80> Redirect permanent / https://www.example.org/ </VirtualHost> 第二种方法使用mod_rewrite: <VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> “重定向永久”和mod_rewrite节之间有什么区别。一个比另一个好吗?

2
Apache重写多个条件
我有一个网站已从旧域名(例如olddomain.com)迁移到新域名(例如newdomain.com)。 出于SEO的原因,我需要将所有网站访问量重写为新的主要域名(例如www.newdomain.com)。不幸的是,我不知道如何添加多个OR类型重写条件。似乎在所有条件下(下面的示例代码),我得到一个AND条件。 <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName newdomain.com ServerAlias www.newdomain.com ServerAlias olddomain.com ServerAlias www.olddomain.com DocumentRoot /var/www/newdomain.com/www/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn RewriteEngine on RewriteCond %{HTTP_HOST} ^olddomain.com [NC] RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC] …

11
.htaccess无法正确重定向到www前缀的页面
我正在尝试不使用www重定向网址。到www.version(从example.com到www.example.com)。我用平常的 RewriteCond %{HTTP_HOST} ^example\.com [nc] RewriteRule (.*) http://www.example.com/$1 [R=301,L] 这适用于我所有其他项目。但是,在此特定站点上,它以重定向循环结尾。这是一个很奇怪的部分:我试图卷曲非www版本,以查看它使用了什么标题 curl --get http://example.com --dump-header domain.header > domain.html。头文件如下所示: HTTP/1.1 301 Moved Permanently Date: Mon, 06 Jun 2011 14:45:16 GMT Server: Apache/2.2.16 (Debian) Location: http://example.com/ Vary: Accept-Encoding Content-Length: 310 Content-Type: text/html; charset=iso-8859-1 但是,生成的HTML文件是这样的: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved …

1
为什么我的RewriteLog不起作用?
我有一个.htaccess,它看起来像这样: RewriteEngine on RewriteLog "/Applications/MAMP/logs/rewrite_engine_log" RewriteCond %{REQUEST_URI} !/(index.php|css|images|js)/.*$ RewriteRule (.*) /mysite/index.php/$1 当我添加该RewriteLog指令时,出现内部服务器错误。 在Apache日志文件中,我得到以下信息: /Applications/MAMP/htdocs/mysite/.htaccess: RewriteLog not allowed here 我没有手动创建该rewrite_engine_log文件,但是该路径/ Applications / MAMP / logs /在我的Mac上存在。接下来我可以尝试什么来获取RewriteEngine日志文件?

2
如何使所有URL通过单个PHP文件运行?
这些形式的URL的MVC系统如何通过单个index.php文件强制所有请求? http://www.example.com/foo/bar/baz http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object http://www.example.com/hey/you 编辑:当我尝试下面的重写规则时,出现此错误: [error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1 [error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1 编辑:哦,这是/index.php的完整内容。当我删除重写规则时,它将输出“ /”或“ /index.php”,否则我将得到404。 <?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> 已解决:我在重写规则的index.php前面添加了一个/,然后它起作用了: 再次解决:原来只需要/,因为我正在运行2.2.4。当我升级到2.2.11时,不再需要/。

4
为什么我的RewriteRule所在的位置会出现双斜杠?
我正在使用以下代码将所有www请求定向到非www URL: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC] RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 这在我的网站根目录下的.htaccess文件中非常有效。 例如, www.example.com-> example.com/ www.example.com/-> example.com/ www.example.com/other_page-> example.com/other_page 但是,如果我将相同的代码移到VirtualHost配置中,则重写的URL包含双斜杠。 www.example.com-> example.com// www.example.com/-> example.com// www.example.com/other_page-> example.com//other_page 我通过从重写规则中删除斜杠来修复它: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC] RewriteRule ^(.*)$ http://example.com$1 [R=301,L] 但是我不明白原因。有人知道为什么吗?

3
mod_rewrite不转发GET参数
我在开发计算机上使用mod_rewrite设置Apache时遇到问题。Mod_rewrite是活动的,并且对于某些规则非常有效。某些规则不符合预期,例如: RewriteRule ^static/([^/]+)/([^/]+) /static.php?sISOCode=$1&sPage=$2 在static.php中,我这样做(用于调试): <?php print_r($_GET); print_r($_POST); print_r($_SERVER); die(); 哪个打印(从$ _SERVER数组中删除了一些项目): Array ( ) Array ( ) Array ( [SERVER_SIGNATURE] => <address>Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch Server at alpha.prove.no Port 80</address> [SERVER_SOFTWARE] => Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.