无法理解.htaccess重写规则/正则表达式的混合结果

时间:2013-12-19 10:37:01

标签: regex apache .htaccess mod-rewrite

我有一个简单的网站,其中包含一个带有div的页面,该div根据用户选择的链接填充了ajax内容。此站点在Apache服务器上运行,域根目录中包含.htaccess文件。对www.mydomain.com的请求被定向到scripts / index.php,而对动态内容(但不是资源文件)的请求被定向到同一个.php脚本,请求的内容作为参数传递(例如,www.mydomain.com / myProject将被重写为scripts / index.php?dynContent = myProject)。

我的重写规则在下面,并且大多数情况下他们正确执行这些描述的任务;但是,我遇到了一些与第二个条件不匹配的URL,即使我期望它们 - 虽然这是我第一次为.htaccess文件编写规则所以我真的不知道是什么我正在谈论......第二个条件失败的URL的一个很好的例子是www.mydomain.com/about,但我通过测试随机单词/字母遇到了更多。

你能告诉我为什么www.mydomain.com/about失败第二个条件吗?此外,如果有更优雅的方式来实现我上面描述的目标,我很乐意了解它。谢谢!!

RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteRule ^(/)?$ scripts/index.php [L]

RewriteCond %{REQUEST_URI} .*[^index.php|.css|.js|.jpg|.html|.swf]$
RewriteRule .* scripts/index.php?dynContent=$1 [L]

1 个答案:

答案 0 :(得分:0)

这是因为第二条规则中的正则表达式不正确。

将您的代码更改为:

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteRule ^(/)?$ scripts/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(php|css|js|jpe?g|html|swf)$
RewriteRule ^(.*)$ scripts/index.php?dynContent=$1 [L]