Q2:为什么这个配置代码不适用于.htaccess?

时间:2009-05-27 05:19:03

标签: .htaccess mod-rewrite

我将使用什么代替.htaccess中的Document_Root?

以下是我的linux服务器的htttp.conf。

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]

但现在我将域名转移到共享服务器。因此,为了正确运行我的网站,重写规则中的.htaccess需要进行哪些更改?

我的.htaccess如下:

RewriteEngine On
RewriteBase /~laborfa2
RewriteCond %/~laborfa2/lf/main/com/%{REQUEST_FILENAME}.php -f
RewriteRule /(.*)(/?)$ /~laborfa2/lf/main/com/$1.php [L]
RewriteRule ^/([a-zA-Z]+)([a-zA-Z0-9_]{3,15})(/?)$ /~laborfa2/lf/main/com/profile.php?fairid=$1$2 [L]

但它不起作用。请建议.htaccess中需要进行更改。

1 个答案:

答案 0 :(得分:1)

REQUEST_FILENAME已经是绝对文件系统路径,前置DOCUMENT_ROOT是错误的。

此外,在.htaccess文件中使用mod_rewrite时,Apache会在测试规则之前从请求的URI路径中删除每个目录的路径前缀。如果.htaccess文件位于Web服务器的文档根目录中,则它是被剥离的前导/。因此,您的模式不能以服务器或虚拟主机配置中的前导斜杠开头。

所以试试这个:

RewriteBase /~laborfa2/
RewriteCond %{DOCUMENT_ROOT}~laborfa2/lf/main/com/$1.php -f
RewriteRule (.*)(/?)$ /lf/main/com/$1.php [L]
RewriteRule ^([a-zA-Z]+[a-zA-Z0-9_]{3,15})(/?)$ /lf/main/com/profile.php?fairid=$1 [L]