【问题标题】:Why does this config code not work in .htaccess?为什么此配置代码在 .htaccess 中不起作用?
【发布时间】:2010-07-07 01:46:39
【问题描述】:
<VirtualHost *:80>
   DocumentRoot /lf/main/com 
   ServerName 74.220.215.241/~laborfa2 
   ServerAlias 74.220.215.241/~laborfa2 
   RewriteEngine on 
   #RewriteLogLevel 2 
   #RewriteLog logs/rewrite.log 
   RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f 
   RewriteRule ^/(.*)(/?)$ /$1.php [L] 
    RewriteRule ^/([a-zA-Z]+)([a-zA-Z0-9_]{3,15})(/?)$ /profile.php?fairid=$1$2 [L] 
    RewriteRule ^/([a-zA-Z]+)([a-zA-Z0-9_]{3,15})/([a-z]*)(/?)$ /$3.php?fairid=$1$2 [L]     

 </VirtualHost> 

它在 linux(htt.vhost) 上运行良好,但是当我将它粘贴到 .htaccess 中时不起作用。

那么我需要改变什么才能让它工作呢?

【问题讨论】:

  • 请正确格式化您的代码!每行缩进 4 个空格字符以将它们格式化为代码块。

标签: apache .htaccess mod-rewrite


【解决方案1】:

生日,

如上所述,VirtualHost 指令的上下文明确排除了它在 .htaccess 文件中的使用:

来自 Apache 2.2 手册:

server config ... 表示该指令可以在服务器配置文件(例如,httpd.conf)中使用,但不能在任何容器中使用。 .htaccess 文件中根本不允许这样做。

HTH

干杯,

【讨论】:

    【解决方案2】:

    您不能在虚拟主机中设置虚拟主机。

    【讨论】:

    • 我将使用什么来使用 .htaccess 运行上述代码?因为我正在将我的网站从 linux 转移到共享服务器。例如。对于我用于“Document_Root”的内容
    【解决方案3】:

    您正在使用的 &lt;VirtualHost&gt; 块只能在 httpd.conf 文件(主服务器配置)中配置,在 .htaccess 中不起作用。

    您可以尝试将 VirtualHost 移到 httpd.conf 中,然后将 RewriteCond 和 RewriteRule 移到 .htaccess 文件中

    【讨论】:

    • 我将使用什么来使用 .htaccess 运行上面的代码?因为我正在将我的站点从 linux 转移到共享服务器。例如。对于“Document_Root”我使用什么?
    【解决方案4】:

    ServerName 指令应包含服务器名称而不是 URL。将其设置为 www.example.com:80 的值是有效的,但 www.example.com/~example 是无效的。请参阅 Apache mod_core 文档。

    除此之外,即使条目已被注释掉,您也不能在 .htaccess 文件中使用 RewriteLog 指令。请参阅 Apache mod_rewrite 文档。

    【讨论】:

      【解决方案5】:

      您不能在.htaccess file 中使用RewriteLog 指令。请参阅mod_rewrite documentation。当您遇到此类问题时,您还应该查看错误日志。

      【讨论】: