如果文件存在于root中,如何重定向到另一个页面?

时间:2011-07-29 03:38:35

标签: php .htaccess redirect

我正在尝试创建一个脚本来放置我网站上的所有页面,如果某某文件存在于根目录(“/”)中,它将自动重定向到它并且如果文件不存在则无效。

我正在使用这个,所以我可以为网站设置一个维护模式,这样我就可以在我工作时将其删除。我已经制作了维护页面,我只是不知道如何设置脚本。文件名是maintenance.html,我只希望它在根文件中。我不想将其上传到每个目录以使网站失效。

文件网址为http://domain.tld/maintenance.html,如果文件在那里,脚本将会移动,如果不存在重定向,则重定向到该文件。 我知道重定向代码是(用HTML格式)

<meta HTTP-EQUIV="REFRESH" content="0; url=http://domain.tld">

5 个答案:

答案 0 :(得分:3)

您应该在.htaccess文件中尝试此操作:

RedirectPermanent / /maintenance.html
RedirectPermanent /page2.html /maintenance.html
RedirectPermanent /anotherpage.html /maintenance.html

等等。因此,只需为您网站的每个页面执行此操作,然后在每个新页面上执行此操作。

这会将您的每个网页重定向到维护页面。

在我看来,

.htaccess是最好的方式。 (比JavaScript更好)

希望这有帮助。

编辑:

要使用它,首先要放:

RedirectPermanent

然后是空格,然后是您要重定向到维护页面的页面:

/page.html

然后是另一个空格,然后是您要重定向到的页面:

/maintenance.html

所以,总之,这是一个例子:

RedirectPermanent /page.html /maintenance.html

请注意 RedirectPermanent 之间的空格,页面从重定向,页面重定向到。

它的工作方式,我不知道。这不是一个脚本,它是一个.htaccess文件代码。

答案 1 :(得分:2)

您可以使用:

if(file_exists('/file.php'))
{
   //do something if file exists
}

答案 2 :(得分:2)

更好的方法是将.htaccess命名文件放在根文件夹中,其中包含以下内容:

ErrorDocument 404 /maintenance.html

如果被叫页面不存在,则会自动重定向到此页面。

答案 3 :(得分:1)

当您的网络服务器可以为您执行此操作时,编写自己的服务器端脚本以检查文件效率不高。在.htaccess文件中使用Apache的mod_rewrite功能;当您想要将页面置于维护模式时,您将启用(即取消注释)重写规则。如果您通过规则允许从您自己的IP访问,那么这样做也可以让您在工作时访问该网站。

如果这是免费托管 - 它似乎是 - 那么你可能无法做到这一点,但我不明白为什么它会成为一个主要问题。大多数网络服务器软件都有某种重写功能,这是一个相当简单的重写。

或者你可以使用类似于此的快速和脏的Javascript(可能不是这样):     <script type="text/javascript">location = www.yoursite.com/maintenance.html;</script>

不过,最好使用重写。

答案 4 :(得分:1)

您需要一套适用于您的网络服务器的重定向规则。如果你正在运行Apache,mod_rewrite是一个神奇的词,如果你正在运行别的东西,那么,我不会知道这个神奇的词,但是大多数服务器都存在类似的东西,如果不是全部的话。

但是,使用Apache辉煌的mod_rewrite,将所有流量重定向到设置页面或地址,例如在维护期间,简单如下:

<IfModule mod_rewrite.c>

# Use mod_rewrite
RewriteEngine on

# If you want, you can exclude yourself by adding a condition for the redirection,
# i.e. if the RewriteCond matches, proceed with the RewriteRule
# This statement checks that the IP of the client isn't 123.456.789.012
RewriteCond %{REMOTE_ADDR} !123.456.789.012

# Redirect all traffic to /maintenance.html with a "307 Temporary Redirect",
# except traffic to the maintenance page.
RewriteCond %{REQUEST_FILENAME} !maintenance.html
RewriteRule .* /maintenance.html [R=307,L]

</IfModule>

你问这些说明应该在哪里?好吧,因为它是一个临时的东西,最合乎逻辑的是你的webroot中的.htaccess文件。但是也可以在服务器/虚拟主机全局配置中包含相同的内容,从优化方面来看,永久规则集是有意义的。

要禁用重定向,只需注释掉RewriteEngine on语句或RedirectRule语句即可。您也可以将.htaccess重命名为其他内容或删除它。