vHost 重定向根本不起作用
vHost redirect not working at all
目标:将每个请求重定向到 index.php,但 RewriteCond 中列出的文件和文件夹(及其内容)除外。
一个朋友和我一起搭建了服务器,但是还没来得及修复这个bug。该页面自动以 HTTPS 结束。
将其用作 000-default.conf (/etc/apache2/sites-enabled/000-default.conf) 时,页面不会重定向到 index.php。例如:访问 www.page.com/uploads/38 有效,尽管它应该重定向到 www.page.com/index.php。这很烦人,因为我正在模拟文件系统并且不想允许访问文件,至少不是那样。
a2ensite 000-default.conf:站点 000-default.conf 已启用
a2enmod 重写:模块重写已启用
这是我的 000-default.conf:
<VirtualHost *:80>
ServerAdmin root@page.com
DocumentRoot /var/www/default
ServerName www.page.com
ServerAlias page.com
RewriteEngine On
<Location />
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
</Location>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerAdmin root@page.com
DocumentRoot /var/www/default
ServerName www.page.com
ServerAlias page.com
RewriteEngine On
<Location />
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
</Location>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/page.com.crt
SSLCertificateKeyFile /etc/ssl/page.com.key
SSLCertificateChainFile /etc/ssl/comodo-ca.crt
</VirtualHost>
在查看 default_error.log 时,我经常会发现这样的内容:
Request exceeded the limit of 10 internal redirects due to probable configuration error.
还有:
RSA server certificate CommonName (CN) `page.com' does NOT match server name!?
提前致谢。
%{REQUEST_URI}
变量以 /
开头,您的正则表达式并非如此,因此条件将始终为真,包括当 URI 被重写为 /index.php
时,这会导致循环。
将块替换为:
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
此外,我猜你已经购买了名字 "page.com" 的证书, 而不是 "www.page.com",这意味着当你去 "www.page.com" 并且浏览器看到 "page.com" 的证书,它会抛出异常。您需要 "www.page.com" 的证书(并且可以选择使用 "page.com" 作为备用名称)/.
编辑
嗯,这在 <Location />
容器内对我不起作用。但这本身在容器之外起作用:
RewriteEngine On
RewriteCond !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^/(.*)$ /index.php [L,R]
目标:将每个请求重定向到 index.php,但 RewriteCond 中列出的文件和文件夹(及其内容)除外。
一个朋友和我一起搭建了服务器,但是还没来得及修复这个bug。该页面自动以 HTTPS 结束。
将其用作 000-default.conf (/etc/apache2/sites-enabled/000-default.conf) 时,页面不会重定向到 index.php。例如:访问 www.page.com/uploads/38 有效,尽管它应该重定向到 www.page.com/index.php。这很烦人,因为我正在模拟文件系统并且不想允许访问文件,至少不是那样。
a2ensite 000-default.conf:站点 000-default.conf 已启用 a2enmod 重写:模块重写已启用
这是我的 000-default.conf:
<VirtualHost *:80>
ServerAdmin root@page.com
DocumentRoot /var/www/default
ServerName www.page.com
ServerAlias page.com
RewriteEngine On
<Location />
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
</Location>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerAdmin root@page.com
DocumentRoot /var/www/default
ServerName www.page.com
ServerAlias page.com
RewriteEngine On
<Location />
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
</Location>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/page.com.crt
SSLCertificateKeyFile /etc/ssl/page.com.key
SSLCertificateChainFile /etc/ssl/comodo-ca.crt
</VirtualHost>
在查看 default_error.log 时,我经常会发现这样的内容:
Request exceeded the limit of 10 internal redirects due to probable configuration error.
还有:
RSA server certificate CommonName (CN) `page.com' does NOT match server name!?
提前致谢。
%{REQUEST_URI}
变量以 /
开头,您的正则表达式并非如此,因此条件将始终为真,包括当 URI 被重写为 /index.php
时,这会导致循环。
将块替换为:
RewriteBase /
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^(.*)$ index.php [L,QSA]
此外,我猜你已经购买了名字 "page.com" 的证书, 而不是 "www.page.com",这意味着当你去 "www.page.com" 并且浏览器看到 "page.com" 的证书,它会抛出异常。您需要 "www.page.com" 的证书(并且可以选择使用 "page.com" 作为备用名称)/.
编辑
嗯,这在 <Location />
容器内对我不起作用。但这本身在容器之外起作用:
RewriteEngine On
RewriteCond !^(index\.php|css|fonts|gfx|js|favicon\.ico)
RewriteRule ^/(.*)$ /index.php [L,R]