使用mod_rewrite将子目录名称重定向到index.php以获取漂亮的URL

时间:2014-04-10 15:06:34

标签: apache .htaccess mod-rewrite laravel-4

我在Apache服务器上有一个基于框架(Laravel 4)的网站,该框架附带.htaccess文件,用于删除尾部斜杠,并将不存在的文件重定向到index.php,以获取漂亮的URL。

我使用网址的第一个片段进行本地化,例如mysite.com/en/about。我还有本地化资源文件的物理语言文件夹,例如/en/images/hello.jpg

物理语言文件夹以这种方式破坏.htaccess文件中的URL重定向:

  • mysite.com/en会自动重定向到文件夹root:mysite.com/en/
  • .htaccess
  • 删除了尾部斜杠
  • 循环!

因此mysite.com/en不能用于语言索引,我使用/en/home作为解决方法。

股票.htaccess文件中的部分:

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

是否可以将文件夹名称重定向到index.php,而无需对其进行硬编码。那样;

  • mysite.com/en被重定向到index.php
  • mysite.com/en/images/about.jpg带来相关文件

1 个答案:

答案 0 :(得分:1)

问题似乎是你的尾随删除规则。用此规则替换它:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]

此规则将跳过删除斜杠的目录,因此/en/将不受影响。

PS:请务必在新浏览器中对此进行测试,以避免301缓存问题。