Apache mod_Rewrite中的工作重写规则

Apache mod_Rewrite中的工作重写规则,apache,mod-rewrite,Apache,Mod Rewrite,我在我的webapp中做了很多更改,URL就是这样 但是现在我改变了目录结构,公共文件夹现在是webroot文件夹,这意味着不再存在了 现在我的URL查看 我想做一个Apache重写来捕获公共单词附带的URL 你试试这个 RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d R

我在我的webapp中做了很多更改,URL就是这样

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

现在我的URL查看

我想做一个Apache重写来捕获公共单词附带的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

放弃第一条规则。所有现有文件(大小不为null+链接)和所有目录url都会被您的重写条件捕获,您将其设置为不执行任何操作,并将其作为最后一条规则([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]只需停止对当前请求的重写)

删除
重写规则的
部分
?当前规则发生了什么?此外,这些规则是在
.htaccess
文件中还是在Apache配置中?它们在webroot文件夹的.htaccess中:)Hi@oblig如果我在规则中删除public,我的重写器会告诉我的web应用程序控制器public是一个模块:(Hi@M'vy我将de$i替换为$1,我删除了de-first规则,我得到了错误500,在我的服务器日志中得到了这个..
RewriteRule^public/(.+)$/$1[NC,L]RewriteRule^.*$/index.php[NC,L]
mod_rewrite:已达到内部重定向的最大数量。假设配置错误。如果需要,请使用“RewriteOptions maxrirects”增加限制。嘿@M'vy感谢您的帮助,我相信第一个自动重写规则将删除公共单词并发送新url,而不发送公共url,然后第二个重写规则捕获t他创建了一个新的干净的url并重定向到index.php,我说的对吗?因为它不起作用,而公共仍然保留在url中,而公共模块不存在:(,有什么线索吗?第一条规则应该将任何URL(如
/public/something
重写为
/something
)现在
something
需要在apache的DocumentRoot中才能工作。第二条规则只在这里捕获对不存在文件的引用/dir到
index.php
。顺便说一句,我又读了你的帖子,也许你是应该删除第一条规则的RewriteCond,因为您请求的URL不再存在,并且永远不会匹配。