我试图重写我的网址在递归与mod_rewrite的
localhost/myapp/view/something or
localhost/myapp/crud/something
形式
localhost/myapp/view.pl?view=something or
localhost/myapp/crud.pl?action=something
所有其他请求应被这样映射: 本地主机/ MYAPP /登录 localhost/myapp/login.pl
我试过用这个.htaccess文件,但我得到了一个递归如果我启用了最后的 RewriteRule,我不明白为什么,因为我用RewriteCond保护它。 这是我第.htacces mod_rewrite的文件,所以请耐心等待与我同在)
RewriteEngine On
RewriteRule ^/?crud/([^/]*)$ /myapp/crud.pl?action=$2 [QSA]
RewriteRule ^/?view/([^/]*)$ /myapp/view.pl?view=$2 [QSA]
RewriteCond $1 !^/(view|crud)$
RewriteRule ^/?([^/]*)$ /myapp/$1.pl [QSA]
更新:
我删除了前导/并添加[L]标志,现在我得到以下错误Apache的错误.LOG:
[Mon Jul 09 11:55:33 2012] [error] [client 127.0.0.1] File does not exist: /srv/http/myapp/myapp
新文件:
RewriteRule ^crud/([^/]*)$ myapp/crud.pl?action=$2 [L,QSA]
RewriteRule ^view/([^/]*)$ myapp/view.pl?action=$2 [L,QSA]
RewriteCond $1 !^(view|crud)$
RewriteRule ^([^/]*)$ myapp/$1.pl [QSA]
检查出mod_rewrite标志 - http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteflags也许[L]会帮助你。 – hovanessyan 2012-07-09 09:27:13
这是一次令人印象深刻的火焰尝试。 :-)'.htaccess'规则不需要前导'/?'。同上放弃替代品上领先的'/'。 (请阅读“每个目录”语法)。同样,cond regexp应该是'!(view | crud)'。加上[L]标志。 – TerryE 2012-07-09 09:38:07
好吧,我摆脱了领先的/并添加了[L]标志,现在我在error_log中获得这个:/ srv/http/myapp/myapp – zbenjamin 2012-07-09 10:01:17