.htaccess,重定向不存在除了少量URL重写

时间:2013-11-06 22:01:58

标签: .htaccess url-rewriting rewrite

我有一个网页,如果用户http://wwww.somewebsite.com/nonexistingfolderhttp://www.somewebsite.com/nonexistingfile.html输入不存在的文件或文件夹,只需转发到www.somewebsite.com即可。然后想创建一个从www.somewebsite.com/about.html到www.somewebsite.com/about的网页,因为在我看来,更短的更好。使用.htaccess我认为我可以将RewriteCond用于不存在,将RewriteRule用于用户友好的网页网址。我很害怕.htaccess我只知道基础知识,我做了我的研究甚至已经提出的问题但是不确定如何编写这个例外规则。

如何在.htaccess中添加代码,以便除了我指定的网页网址外,我可以拥有所有不存在的文件/文件夹?。下面这个将简单地将所有不存在重定向到index.html,当我做www.somewebsite.com/about(来自/about.html)时,只需转到index.html。有什么帮助吗?

--- my .htaccess shows --
# Redirect non-existing files or folders to index
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ / [L,QSA]
</IfModule>

# Rewrite existing files sample RewriteRule ^contact/$  /pages/contact.htm [L]
RewriteEngine on
RewriteRule ^/$    index.html [L]
RewriteRule ^about/$    about.html [L]
RewriteRule ^services/$    services.html [L]
RewriteRule ^application/$    application.html [L]
RewriteRule ^contact/$    contact.html [L]
RewriteRule ^privacy/$    privacy.html [L]

1 个答案:

答案 0 :(得分:2)

您需要在所有其他更具体的规则之后进行全有或全无重写(例如RewriteRule ^(.*)$ / [L,QSA]。规则都按照它们出现的顺序应用,这意味着您的第一个规则总是被应用,然后重写引擎停止。

交换订单并再试一次:

# Rewrite existing files sample RewriteRule ^contact/$  /pages/contact.htm [L]
RewriteEngine on
RewriteRule ^/?$    index.html [L]
RewriteRule ^about/$    about.html [L]
RewriteRule ^services/$    services.html [L]
RewriteRule ^application/$    application.html [L]
RewriteRule ^contact/$    contact.html [L]
RewriteRule ^privacy/$    privacy.html [L]

--- my .htaccess shows --
# Redirect non-existing files or folders to index
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ / [L,QSA]
</IfModule>

此规则:

RewriteRule ^/$    index.html [L]

永远不会应用,因为在向其应用规则之前会从URI中删除前导斜杠,因此^/$永远不会匹配,您需要^$^/?$