我想在我的子域和我的域中重写所有索引文件,例如/index
。到目前为止,没有必要使用子域。现在问题是来自htaccess文件的重写规则。这将重写URL,如下面的给定代码所示:
RewriteRule ^index\.(htm|html|php) http://%{HTTP_HOST}/ [R=301,L]
RewriteRule ^(.*)/index\.(htm|html|php) http://%{HTTP_HOST}/$1/ [R=301,L]
意味着在域中将重写所有索引文件。这很好但不在子域中。现在我想我可以简单地为我的子域添加一个条件,如:
RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$
RewriteCond %{HTTP_HOST} !^www\.
但幸运的是,这不起作用。
在此处提供更多信息是URL的样子:
http://www.example.com/index
and the subdomain:
http://subdomain.example.com/index
使用上面的代码,URL将是:
http://www.example.com/
and the subdomain:
http://subdomain.example.com/index
如果有人可以帮助我,那就太棒了。
非常感谢。
更新:
为了提供进一步的信息,我需要解释它是如何运作的。
在根目录中有子域的文件夹。
--> /index.php
--> /folderA
--> /subdomain
/root --> /folderB
--> /index.php
网址如下:
http://www.example.com/subdomain/folderA/index
和
http://subdomain.example.com/folderA/index
我确实使用干净的网址,因此只有index
而不是index.php
等。
调用页面时,默认设置已隐藏index.php。问题是我什么时候会改变文件夹,意思是folderA和folderB。因此,我读出了文件的基本名称,并使用标题函数重定向到正确的目录。主要问题是子域。在域中它运作良好。就在我有一个带有URL的文件夹的索引页面时:
http://subdomain.example.com/folderA/(index will be hidden)
并将读出basename(=> index)并将标题为:
http://subdomain.example.com/folderB/(index will be hidden)
这将是一个问题。 URL将以错误的方式重写。或者另一个简单的例子:
在root/subdomain/folderA/
此按钮只是一个链接:<a href="/index.php">...</a>
。页面网址为:subdomain.example.com/folderA/filexy
点击该链接时,网址将被重写为www.example.com/subdomain/folderA/
答案 0 :(得分:1)
你的规则如下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# do nothing if subdomain
RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule - [L]
RewriteRule ^index\.(htm|html|php) http://%{HTTP_HOST}/ [R=301,L]
RewriteRule ^(.*)/index\.(htm|html|php) http://%{HTTP_HOST}/$1/ [R=301,L]
PS:虽然我建议您查看DirectoryIndex directive,然后您可以使用以下代码替换上述代码:
DirectoryIndex index.htm index.html index.php
答案 1 :(得分:0)
试试这个:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$ [NC]
RewriteRule ^/index\.(htm|html|php)$ http://%{HTTP_HOST}/$1 [NC,R=301,L]
</IfModule>