繁体   English   中英

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

[英]Redirect subdirectory names to the index.php for pretty URLs using mod_rewrite

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

我使用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带来了相关文件

问题似乎是您的斜杠删除规则。 用以下规则替换它:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM