Mac 上的 .htaccess 问题

Mac 上的 .htaccess 问题

可能重复:
您想了解有关 Mod_Rewrite 规则的所有信息但又不敢问吗?

我正在尝试使用以下 .htaccess 重写规则,但由于某种原因它不起作用。

RewriteEngine On
RewriteRule ^/([^/]+)/([^/]+)(.*) /index.php?_controller=$1&_action=$2$3 [QSA,L]
RewriteRule ^/([^/]+)(.*) /index.php?_controller=$1$2 [QSA,L]

我想要一个这样的 URL:

http://name.local/someFolder/?_controller=aController&_action=anAction

转换为:

http://name.local/someFolder/aController/anAction

我不确定为什么我的重写规则无法像我希望的那样工作,任何帮助都将不胜感激。谢谢!

答案1

可以像这样重写:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?_controller=$1&_action=$2 [QSA,L]

它将重写(内部重定向)/first/second到 的请求/index.php?_controller=first&_action=second

仅当您请求不存在的资源时它才会起作用。因此,如果您有这样的文件夹/first/second,则不会发生重写。


如果将模式从 更改^([^/]+)/([^/]+)$^([^/]+)/([^/]*)$,那么它也将适用于此重写:/first//index.php?_controller=first&_action=请注意这里需要尾随斜杠)。


如果将模式从 更改^([^/]+)/([^/]+)$^([^/]+)/([^/]+)/?$,则/first/second/first/second/(一个带有尾随斜杠)都将触发规则。


如果将模式从 更改^([^/]+)/([^/]+)$^([^/]+)(/([^/]*))?$,则此单个重写规则将匹配/first/second以及 以及/first//first显然,如果不存在第二段,则操作参数_action=将为空)。

还可以使带有 2 个段的尾部斜杠成为可选的(即/first/second/first/second/将被视为相同(从重写的角度来看)。为此 - 将模式更改为^([^/]+)(/([^/]*))?/?$

相关内容