重定向.htaccess文件中的绝对路径

时间:2013-02-15 23:32:23

标签: php .htaccess redirect

我有这个网站,以前网页的网址是这样的:

请注意,即使它们是.php文件,这些网址也没有任何扩展名。这是一个Wordpress网站,位于域的根目录中。 wordpress-site现在已被移动到一个文件夹中,但我想设置从以前所有URL到新URL的重定向(出于SEO原因)。

到目前为止,我找到了一个远非完美的临时解决方案。我做的是我把它放在.htaccess文件中(删除PHP扩展名):

  # Turn on the rewrite engine
  RewriteEngine  on
  # If the request doesn't end in .php (Case insensitive) continue processing rules
  RewriteCond %{REQUEST_URI} !\.php$ [NC]
  # If the request doesn't end in a slash continue processing the rules
  RewriteCond %{REQUEST_URI} [^/]$
  # Rewrite the request with a .php extension. L means this is the 'Last' rule
  RewriteRule ^(.*)$ $1.php [L]

然后我创建了与之前的URL相同的不同文件(带有.php-extension,然后由于我的.htaccess文件而被删除)。在每个文件的顶部,我插入了一个

  <?php header('Location: THE_NEW_URL'); ?>

它有效,但它像贝蒂一样难看!    最近,我遇到了一个错误,因为我的问题暂时,愚蠢的修复。我试图在文件夹的根目录中设置一个新页面(名为test.php)。这个test.php文件有一个样式表,它链接到以下方式(非常标准,我假设):

     <link href="css/style.css" rel="stylesheet" type="text/css" />

但是test.php文件找不到这个样式表(是的,我确定我正确上传了它)。如果我转到源文件并单击它,那么我可以看到它试图访问

     css/style.css.php

你不必被爱因斯坦知道,这是我的.htaccess文件,已经在狼群中提出。但是我该怎么办?有没有办法制作我的.htaccess文件,所以我可以按照以下方式做点什么:

     Redirect from SPECIFIC_URL to A_NEW_SPECIFIC_URL

它不会搞砸我域上的所有网址。我喜欢对我的文件进行扩展。我只需要修复这些现已被移动的15个旧URL(没有扩展名)。

我吮吸.htaccess文件,无法在任何地方找到任何教程。太糟糕了!我不知道如何变得更好。我一直在实施我不理解的解决方案!?!

2 个答案:

答案 0 :(得分:2)

我相信这会满足您的需求:

   <IfModule mod_rewrite.c>
      # enable URI rewrite 
      RewriteEngine on
      # set virtual root
      RewriteBase /
      # if request is for an actual file or directory on disk,
      # then do not continue with rewrite engine
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      # setup rewrite table
      RewriteRule ^page1$ page1.php [R=302,L]
      RewriteRule ^page2$ page2.php [R=302,L]
      RewriteRule ^page3$ page3.php [R=302,L]
    </IfModule>

您可以通过简单地在现有条件之上添加这两条RewriteCond线来获得成功:

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f

答案 1 :(得分:1)

如果只有15个旧文件,一个简单的解决方案就是硬编码这15个文件

RewriteEngine on
RewriteRule ^/?oldfile1$ /new1/path1/file1.php [R,L]
RewriteRule ^/?oldfile2$ /new2/path2/file2.php [R,L]
RewriteRule ^/?oldfile3$ /new3/path3/file3.php [R,L]
...