Apache Rewrite Rule仅在root用户删除尾部斜杠

时间:2014-05-08 17:27:53

标签: regex apache .htaccess magento mod-rewrite

我知道有很多关于Apache RewriteRules的问题,尤其是删除尾部斜杠。我看了很多,但我似乎找不到任何人试图解决这个问题。

我正在使用Magento,因此URL结构如下所示:

  • example.com/index.php
  • example.com/index.php /
  • example.com/index.php/page1 /

这是我理想的网址结构:

  • example.com
  • example.com/page1 /
  • example.com/page2 /

所以基本上我只想剥离index.php并确保裸域没有斜杠(example.com而不是example.com/)。另外,如果可能的话,我不想包含硬编码的域名,以便可以在不同的环境中应用重写。

这是我目前的重写......

RewriteCond %{REQUEST_URI} ^/index\.php/?
RewriteRule ^index.php/(.*) /$1 [R=301,L]

这似乎适用于所有情况,除了:

  • example.com/index.php(根本不工作)
  • example.com/index.php/(留下斜杠)

我很感激任何正则表达式的建议!谢谢。


更新 感谢@ zx81中的以下答案,我已成功将所有网址剥离到根域,但仍无法删除斜杠。

所以这是当前的URL:example.com /

我无法删除尾随斜杠!

1 个答案:

答案 0 :(得分:1)

无法测试它,但试试这个。

RewriteRule ^index\.php()/?(?:([^/]+)/)? $1$2 [R=301,L]
  1. 由于空捕获组1 (),它应该处理一个根本不起作用的那个。
  2. 在PCRE(Apache的正则表达式)中,这也会删除尾部斜杠,但Apache可能会决定将其添加回来。