需要针对.htaccess的Mod重写正则表达式解决方案

时间:2010-09-28 17:33:37

标签: regex .htaccess

我将我的网站移到了不同​​的服务器,从那时起,我的所有网址都开始显示404错误。

早些时候我的所有网址都像是mysite.com/title-of-url

但现在所有这些网址都出现404错误,所以我在网站管理员上禁用了seo友好网址功能,现在我可以访问同一页面了 mysite.com/index.php/title-of-url

我厌倦了为.htaccess创建一些正则表达式 RewriteRule ^([^ /。] +)/?$ /index.php/$1 [L]

但它工作正常的一个“/”深度,我的意思是它在mysite.com/first工作但不适用于mysite.com/first/second

我正在寻找REGEX帮助考虑它 mysite.com/first/second应该重写为mysite.com/index.php/first/second以及mysite.com/something被重写为mysite.com/index.php/something ..

期待您的帮助 感谢

1 个答案:

答案 0 :(得分:1)

当然,它不适用于更多/。你的规则说:

  • 从头开始匹配:^
  • (开始分组$1(
  • 匹配斜线以外的所有内容:[^/]+
  • (结束分组:)
  • 匹配可选的前导斜杠/?
  • 匹配结束$

如果你真的想要匹配所有内容,请使用点而不是字符类,匹配除/以外的所有内容:

RewriteRule ^(.+?)/?$ /index.php/$1 [L]

不要忘记在排除现有文件和目录之前包含RewriteCond,以避免无限递归。如果不这样做,最终会出现500内部服务器错误。完整代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ /index.php/$1 [L]