mod_rewrite - 重写目录以查询字符串,除了 /#!/

Posted

技术标签:

【中文标题】mod_rewrite - 重写目录以查询字符串,除了 /#!/【英文标题】:mod_rewrite - rewrite directory to query string except /#!/ 【发布时间】:2014-11-10 13:38:19 【问题描述】:

我正在尝试将 www.domain.com/something/some/ 重写为 www.domain.com/index.php?q=something/some/

这是我目前所拥有的:

RewriteCond %REQUEST_FILENAME ([a-z-]+)/?$
RewriteRule (.*) index.php?q=$1 [QSA,L]

但我想排除以下网址: www.domain.com/#!/something

你能帮忙吗?

谢谢, 约翰

【问题讨论】:

# 和之后的所有内容都不应该到达您的服务器,因为它是一个片段标识符,不应该附加到请求中。 【参考方案1】:

您可以在 root .htaccess 中使用此规则:

RewriteEngine On

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)$ index.php?q=$1 [QSA,L]

使用.+ 也可以处理/#!/something,因为在# 没有到达网络服务器之后,Apache 只会得到/ 作为文本。

【讨论】:

以上是关于mod_rewrite - 重写目录以查询字符串,除了 /#!/的主要内容,如果未能解决你的问题,请参考以下文章

Mod_rewriting 将查询字符串写入 swf 文件

重写空查询字符串

在 mod_rewrite 规则正则表达式中匹配问号

mod_rewrite 更改查询字符串参数名称

mod_rewrite:将路径和查询字符串 URL 作为参数传递

apache mod_rewrite:如何根据其他目录中的文件存在为同一目录添加不同的重写规则?