Apache Rewrite规则匹配和覆盖

时间:2015-01-30 20:19:06

标签: regex apache .htaccess mod-rewrite

我对正则表达式真的很陌生,而且我很难修复我的重写规则。

目前的结构如下:

RewriteEngine on

RewriteRule ^data.js$ /data.php [NC,L]
RewriteRule ^api/(.*)$ /api.php [NC,L]
RewriteRule ^(profile|photo)/?(.*)$ /index.php [NC]

如果我只查找/profile/photo次观看,那么一切正常。但我想自动允许/messages/settings,因为每次添加新的view时,htaccess也需要对alternative literals进行修改。现在,我的问题是如何替换matching group以允许任何类似的链接:

/
/segment
/segment/?(.*)

我尝试了允许所有内容但最终出现“内部服务器错误”:

RewriteRule .* /index.php

还尝试了^(.*)$和其他选项..也尝试了这个:

RewriteRule ^([A-Za-z0-9\.])/?(.*)$ /index.php

为了允许任何字母数字,但我仍然以“内部服务器错误”结束,我知道我正在用match any of content弄乱方括号..有人可以启发我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine on
RewriteBase /

RewriteRule ^data\.js$ data.php [NC,L]
RewriteRule ^api/(.*)$ api.php [NC,L]

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]