Hows Work在mod_rewrite中重写规则

时间:2011-04-12 14:36:25

标签: apache mod-rewrite

我在我的网络应用程序中做了很多更改,网址就是这样......

http://miwebapp.com/public/module/action

但是现在我改变了目录结构,公共文件夹现在是webroot文件夹,这意味着它不存在更多。

现在我的网址看了

http://miwebapp.com/module/action

我想创建一个Apache Rewrite来捕获公共单词附带的URL。

你试试这个..

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^public/(.+)$ /$i [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

:D非常感谢:D

1 个答案:

答案 0 :(得分:0)

删除第一个RewriteRule。所有现有文件(大小不为空+链接)和所有目录url都被RewriteCondition捕获,并且您将其设置为什么都不做并且是最后一条规则([L])。 所以一切都经历了这个唯一的规则。

顺便说一句:我不确定$ i是否确实存在,但我们用它来获得1美元。

编辑1:

是的,我也看到了! 但我得到了解决方案:

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d      
RewriteRule ^public/(.+)$ /$1 [NC,L]     

RewriteCond %{REQUEST_FILENAME} !-s     
RewriteCond %{REQUEST_FILENAME} !-l     
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^.*$ /index.php [NC,L]      

这应该避免在循环中将所有文件重写为index.php! (请注意,当您执行重定向时,.htaccess将使用新值重新处理,[L]只是停止重写当前请求)