我遇到了RewriteRule的问题

时间:2013-10-26 08:42:36

标签: php .htaccess codeigniter mod-rewrite

我有一个我正在尝试开发的网站,而且我有一些(可能是noob)问题让我的重写规则正常工作。

基本上,我正在使用codeIgniter框架来开发网站,作为其中的一部分,我创建了一个RewriteRule来删除URL的index.php部分,但某些图像文件夹除外。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop)
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L]

该网站最初的当前页面为page/facilities/our-shop,这是一个非常基本的页面,其中包含一些指向paypal的链接,以便制作一个非常粗糙的商店页面,因为我们需要快速购买。但是现在我已经实现了一个不同的(读取OpenCart)商店部分,以使其更专业,并允许更多功能等。我已将openCart放在名为shop的子目录中。由于我从原始重写规则中排除了/shop,因此该商店继续正常运作。

然而 - 我的问题...... 我希望旧页面page/facilities/our-shop重定向到/shop,因此就好像我直接在那里导航一样。

我尝试了以下内容:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop)
RewriteRule ^page/facilities\/our-shop$  /TESTSite/shop/$1 [R,NC,L]
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L]

并且

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop)
RewriteRule ^page/facilities\/our-shop$  /TESTSite/shop/$1 [N]
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L]

还有一些其他的变化,但每次我都无法让它发挥作用。有人可以提出建议吗?

由于

1 个答案:

答案 0 :(得分:2)

我认为您可以尝试以下规则:

RewriteEngine on
RewriteRule TESTSite/page/facilities/our-shop$  /TESTSite/shop/$1 [R=301]

RewriteCond %{REQUEST_URI} !^(index\.php|images|css|js|robots\.txt|shop)
RewriteRule ^TESTSite/page/(.*)$ /TESTSite/index.php/$1 [L]

两件事:

  • 使用RewriteCond时,它仅适用于以下规则。所以我重新订购了两条线。
  • 您在规则\之前不需要/

检查this tool以调试您的规则。