htaccess从目录加载资源

时间:2012-03-04 08:27:16

标签: web-services apache .htaccess

我想用RewriteCond制作一个带有RewriteCond的htaccess RewriteRule

到目前为止我所拥有的:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(sql.site.ro)$
RewriteRule ^(.*)$ ro-site-sql/index.php?x=$1

我希望发送到sql.site.ro的所有请求都从/ro-site-sql目录提供。 因此,如果URI为sql.site.ro/index.php,则服务器将转到/ro-site-sql/index.php,或者如果URI为sql.site.ro/images/small/9954.png,则服务器将转到/ro-site-sql/images/small/9954.png

问题是,如果我做

RewriteCond %{HTTP_HOST} ^(sql.site.ro)$
RewriteRule ^(.*)$ ro-site-sql/$1

我收到内部服务器错误,如果我发出

RewriteCond %{HTTP_HOST} ^(sql.site.ro)$
RewriteRule ^(.*)$ ro-site-sql/index.php?x=$1

我在Array ( [x] => ro-site-sql/index.php )内得到/ro-site-sql/index.php。如果不是index.php而不是ro-site-sql/部分吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

重写引擎循环遍历.htaccess文件,直到不再发生替换。您需要确保在第一次更换后此循环停止。有多种方法可以做到这一点。也许最容易理解的是:

RewriteEngine On
RewriteBase   /

RewriteCond %{HTTP_HOST} ^(sql.site.ro)$
RewriteCond $1           !index.php$
RewriteRule ^(.*)$       ro-site-sql/index.php?x=$1    [L,QSA]

添加[L]标志,因为这是此循环的最后一条规则,如果您有时还有其他参数,则添加[QSA]。

答案 1 :(得分:0)

RewriteCond %{HTTP_HOST} ^sql.site.ro$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 ^(\w+/)+\w+\.\w+$
RewriteRule ^(.*)$ ro-site-sql/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sql.site.ro$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(\w+/)+\w+\.\w+$
RewriteRule ^(.*)$ ro-site-sql/index.php?x=$1 [L,QSA]

这应该用于识别实际文件并访问它们并将其他任何内容传递给index.php。