.htaccess 已读取但重定向不起作用
.htaccess is read but redirect not working
我正在使用 apache
+ django
+ mod_wsgi
作为服务器。我的目标是将非 www
url 重定向到 www
url.
我启用了mod_rewrite
:当执行命令Module rewrite already enabled
时,我有
Module rewrite already enabled
sites-available
中的site.conf
读作
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerName www.<site-name>.com
RedirectMatch ^http://<site-name>.com/(.*)$ http://www.<site-name>.com/
</VirtualHost>
<Directory /var/www/<site-name>/app>
AllowOverride All
Order allow,deny
Allow from all
Header set Access-Control-Allow-Origin "http://<site-name>.com"
</Directory>
.htaccess
文件位于 /var/www/<site-name>/app
目录中:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
如果我在 .htaccess
中放入随机代码,该站点将抛出 500 error
,但重定向永远不会起作用(它的行为方式如下):
- 输入
site-name.com
不会触发重定向;
- 在
site-name.com
下,点击链接(由reverse()
函数生成)不会触发重定向;
- 直接输入
site-name.com/morestuff
将触发重定向到 www.site-name.com/morestuff
。
很好,我可以使用@Finbarr 的回答来实现我想要的。但是后来我仍然对导致上述重定向行为的原因感兴趣。
就我个人而言,当您可以访问 conf 文件时,我不会修改 .htaccess 文件来执行此操作。我会为重定向创建一个单独的虚拟主机条目,并让主站点虚拟主机保持正常。典型的重定向在 conf 文件中看起来像这样。
<VirtualHost *:80>
ServerName www.yoursite.com
Redirect 301 / http://yoursite.com/
</VirtualHost>
我正在使用 apache
+ django
+ mod_wsgi
作为服务器。我的目标是将非 www
url 重定向到 www
url.
我启用了mod_rewrite
:当执行命令Module rewrite already enabled
时,我有
Module rewrite already enabled
sites-available
中的site.conf
读作
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerName www.<site-name>.com
RedirectMatch ^http://<site-name>.com/(.*)$ http://www.<site-name>.com/
</VirtualHost>
<Directory /var/www/<site-name>/app>
AllowOverride All
Order allow,deny
Allow from all
Header set Access-Control-Allow-Origin "http://<site-name>.com"
</Directory>
.htaccess
文件位于 /var/www/<site-name>/app
目录中:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
如果我在 .htaccess
中放入随机代码,该站点将抛出 500 error
,但重定向永远不会起作用(它的行为方式如下):
- 输入
site-name.com
不会触发重定向; - 在
site-name.com
下,点击链接(由reverse()
函数生成)不会触发重定向; - 直接输入
site-name.com/morestuff
将触发重定向到www.site-name.com/morestuff
。
很好,我可以使用@Finbarr 的回答来实现我想要的。但是后来我仍然对导致上述重定向行为的原因感兴趣。
就我个人而言,当您可以访问 conf 文件时,我不会修改 .htaccess 文件来执行此操作。我会为重定向创建一个单独的虚拟主机条目,并让主站点虚拟主机保持正常。典型的重定向在 conf 文件中看起来像这样。
<VirtualHost *:80>
ServerName www.yoursite.com
Redirect 301 / http://yoursite.com/
</VirtualHost>