2014-04-10 48 views
1

我有一个Apache服务器上的网站,基于一个框架(Laravel 4),其配备了一个.htaccess文件来删除尾随斜线和重定向不存在的漂亮的网址文件到index.php以获得漂亮的URL。重定向子目录名的index.php文件使用mod_rewrite的

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

物理语言文件夹打破.htaccess文件的URL重定向这样:

  • mysite.com/en自动重定向到文件夹根: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

问题似乎是你的尾随斜线去除规则。替换此规则:

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

此规则将跳过斜线,去除这样/en/将不受影响目录。

PS:请确保在新的浏览器中进行测试,以避免301缓存问题。

+0

好点!但是随后的斜杠被发送到index.php,混淆了解析器。嗯,也许另一个规则可用于目录名来重定向他们没有结尾的斜线...我会做一些测试... – SuperDuck

+0

你是什么意思'然后尾随斜线被送到index.php'是什么意思?需要注意的是'的RewriteCond%{} REQUEST_FILENAME!-d'将跳过任何目录和'的RewriteCond%{} REQUEST_FILENAME!-f'将跳过被发送到任何文件'index.php' – anubhava

+0

啊,你说得对,它会永远不会被发送没有更多的修改 - ) – SuperDuck

相关问题