RewriteRules 和 ErrorDocument 规则不适用于 SSL 虚拟主机
RewriteRules and ErrorDocument rules not working for SSL vhosts
已知的 404 请求没有被重定向到 https...并且只显示一个通用的 Not Found
404...端口 80 上的 http 请求开始被重写就好了...
注意事项: 在 Apache 服务器 (2.4.39) 上使用 http.conf 文件(不是 .htaccess)通过 AWS elastic beanstalk
在 64 位 Amazon Linux
/2.8.9。
示例:
- 示例。com/fake
- sub.example.com/fake
Not Found
The requested URL /fake was not found on this server.
.
我的配置文件有两部分...
第 1 部分 将 http 重定向到 https...此 RewriteRule 完美运行...
<VirtualHost *:80>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
第 2 部分 应该将 sub.example.com/fake 重写为 sub.subdomain.com/?url=$1
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
</VirtualHost>
我以为rewrite rule是写错的部分,其实不是因为后面的尝试都没有成功。
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
ErrorDocument 404 "No go bro..."
</VirtualHost>
我认为这只是子域的问题,但这也不起作用。
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/www
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro 1..."
</VirtualHost>
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro 2..."
</VirtualHost>
尝试按照建议添加覆盖,但没有成功
<VirtualHost *:443>
<Directory /var/www/html/www>
AllowOverride All
Allow From All
</Directory>
ServerName ecample.com
DocumentRoot /var/www/html/www
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro..."
</VirtualHost>
One reference 说 RewriteRules 需要在 VirtualHost 标签内的 Directory 标签中...所以我尝试了但没有成功
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/www
<Directory /var/www/html/www>
Allow From All
AllowOverride All
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
ErrorDocument 404 "No go bro..."
</Directory>
</VirtualHost>
DocumentRoot 路径是正确的,因为所有已知 urls example.com
& sub.example.com
工作正常只是 404 是有问题的地方。
将您的重定向配置放在那里:
<VirtualHost *:80>
ServerName blog.example.com
Redirect / http://example.com/blog/
</VirtualHost>
将此代码写入您的 .htaccess 文件。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$
RewriteRule ^/(.*)$ http://example.com/%1/ [R=301,L]
重写规则需要放在https重定向前的<VirtualHost *:80>
下。为什么……不确定。但这是唯一有效的方法。
<VirtualHost *:80>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
已知的 404 请求没有被重定向到 https...并且只显示一个通用的 Not Found
404...端口 80 上的 http 请求开始被重写就好了...
注意事项: 在 Apache 服务器 (2.4.39) 上使用 http.conf 文件(不是 .htaccess)通过 AWS elastic beanstalk
在 64 位 Amazon Linux
/2.8.9。
示例:
- 示例。com/fake
- sub.example.com/fake
Not Found
The requested URL /fake was not found on this server.
.
我的配置文件有两部分...
第 1 部分 将 http 重定向到 https...此 RewriteRule 完美运行...
<VirtualHost *:80>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
第 2 部分 应该将 sub.example.com/fake 重写为 sub.subdomain.com/?url=$1
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
</VirtualHost>
我以为rewrite rule是写错的部分,其实不是因为后面的尝试都没有成功。
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
ErrorDocument 404 "No go bro..."
</VirtualHost>
我认为这只是子域的问题,但这也不起作用。
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/www
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro 1..."
</VirtualHost>
<VirtualHost *:443>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro 2..."
</VirtualHost>
尝试按照建议添加覆盖,但没有成功
<VirtualHost *:443>
<Directory /var/www/html/www>
AllowOverride All
Allow From All
</Directory>
ServerName ecample.com
DocumentRoot /var/www/html/www
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://google.com [L]
ErrorDocument 404 "No go bro..."
</VirtualHost>
One reference 说 RewriteRules 需要在 VirtualHost 标签内的 Directory 标签中...所以我尝试了但没有成功
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/www
<Directory /var/www/html/www>
Allow From All
AllowOverride All
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
ErrorDocument 404 "No go bro..."
</Directory>
</VirtualHost>
DocumentRoot 路径是正确的,因为所有已知 urls example.com
& sub.example.com
工作正常只是 404 是有问题的地方。
将您的重定向配置放在那里:
<VirtualHost *:80>
ServerName blog.example.com
Redirect / http://example.com/blog/
</VirtualHost>
将此代码写入您的 .htaccess 文件。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$
RewriteRule ^/(.*)$ http://example.com/%1/ [R=301,L]
重写规则需要放在https重定向前的<VirtualHost *:80>
下。为什么……不确定。但这是唯一有效的方法。
<VirtualHost *:80>
ServerName sub.example.com
DocumentRoot /var/www/html/sub
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url= [L]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>