RewriteCond - 我做错了什么?

时间:2013-05-03 08:42:40

标签: .htaccess

我使用Opencart并启用了SEO友情链接。

这使得.htaccess文件看起来像这样

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

但我需要添加一个不会被重写的文件夹异常,特别是/ emailer

在网络上回答我做了以下事情:

RewriteCond %{REQUEST_URI} !^/(emailer|js|css)/ [NC]
RewriteRule ^ - [L]
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

这使得/电子邮件/工作,但其他重写没有。有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您只需将其插入主 RewriteRule

之前
RewriteBase /

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^\/(emailer|js|css) [NC]
RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|js|css)$ [NC]
RewriteRule ^([^?]*) index.php?_route_=$1&request_uri=%{REQUEST_URI} [L,QSA]

注意:它没有经过测试,但这可以让您了解如何操作。

稍后编辑:

我已经测试了我的代码,但它没有用。我已经对它进行了编辑,现在可以正常工作,如下所示:

  1. RewriteCond %{REQUEST_FILENAME} !-f =>如果请求不是真实的文件名
  2. RewriteCond %{REQUEST_FILENAME} !-d =>如果请求不是真实的目录
  3. RewriteCond %{REQUEST_URI} !^\/(emailer|js|css) [NC] =>如果根目录中没有以单词emailer / js / css
  4. 开头的目录/文件
  5. RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|js|css)$ [NC] =>如果请求没有以下列ico / gif / jpg / jpeg / png / js / css的扩展名结尾
  6. 注意:

    • 测试你是否需要在重写规则中使用正斜杠,在我的修改示例中添加一个查询变量,并在索引中打印它(在php open标记后的第一行)。 php文件是这样的:

      的print_r($ _ GET [ 'REQUEST_URI']); 出口;

    完成测试后,从htacces和index.php中删除request_uri。

    • 始终使用反斜杠转义正斜杠,例如\ /