我试图让我的服务器在本地看起来整洁(我发誓我是OCD)而我正在做的是将wordpress博客与我的所有子域名结合起来。
我的wordpress博客是我的主要网站example.com。我的子域名位于sub.example.com。
现在,我有这个设置:
public_html
( wordpress files here )
subdomains
sub1 - (sub1.example.com)
sub2 - (sub2.example.com)
sub3 - (sub3.example.com)
blog - (empty)
博客文件夹为空。但是,我想将所有wordpress文件移到blog /,但将博客的URL保留在http://www.example.com/。因此,http://www.example.com/index.php将转到http://www.example.com/blog/index.php,以及博客/.
中的所有目录此代码不起作用:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ blog/$1.php [L]
它反而给了我/的索引。有没有办法做到这一点?
答案 0 :(得分:0)
执行此操作的最佳方法是将所有文件移至/ blog,然后重新定义用于www的Apache siteroot。域包含像
这样的博客文件夹 DocumentRoot /(path)/public_html
- > DocumentRoot /(path)/public_html/blog
这样你甚至不必使用.htaccess重写将你的博客文件夹正确映射到www域的根目录。
如果由于某种原因你无法做到这一点,让我们来看看你的htaccess规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
这两个冲突。如果[OR]
末尾没有RewriteCond
,则规则将充当AND运算符,这意味着每个条件都必须为true。所以你永远不会有一个既不是文件(!-f
)又是一个.php文件(.php -f
)的匹配。
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ blog/$1.php [L]
在这里,您将.php附加到已经包含.php的匹配中,每个RewriteCond。
我会尝试以下方法:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ /blog/$1 [NC,L]
如果您将所有文件移动到/ public_html / blog中,除了/ blog和/ subdomain文件夹之外,/ public_html中没有任何内容,您实际上甚至不需要!-d
& !-f
因为没有匹配的文件或文件夹(除了您的子域文件夹,但我不确定您是否希望在www域下提供这些文件或文件夹)。看到你的wordpress css,js和图像现在也将在/ blog中,你也希望他们的网址也被转发。在根文件夹中工作时,您也不需要RewriteBase /
。只需使用/blog/$1
之类的斜杠启动目标网址即可。最后我添加了条件来检查目标请求是否已经包含/ blog以防止无限重定向...
答案 1 :(得分:0)
答案 2 :(得分:0)
这是另一个工作示例:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example\.com$ [NC]
RewriteRule ^$ /blog/$1 [R=303,L]