0

我正在使用打开了 SEO 友好 URL 的 Opencart。

这使得 .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]

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

4

1 回答 1

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. RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|js|css)$ [NC]=> 如果请求不以以下 ico/gif/jpg/jpeg/png/js/css 的扩展名结束

笔记:

  • 要测试重写规则中是否需要正斜杠,请像我在修改示例中所做的那样附加一个查询变量,然后在 index.php 文件中打印它(在 php 打开标记之后的第一行),如下所示:

    print_r($_GET['request_uri']); 出口;

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

  • 总是用反斜杠转义正斜杠,像这样 \ /
于 2013-05-03T08:57:26.757 回答