【问题标题】:A custom rewrite rule on a PHP micro MVC frameworkPHP micro MVC 框架上的自定义重写规则
【发布时间】:2015-04-01 08:01:44
【问题描述】:

我正在使用 MVC 微框架,并且我有以下 .htaccess 规则:

Options -MultiViews
Options -Indexes

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这会将所有内容重写为 index.php?url=(e.g. user/register/)

在名为“profile”的控制器中,我有一个操作“view”(需要 2 个参数),这意味着 URL 通常是:

profile/view/arg1/arg2

我想要做的是拥有一个更友好的网址,例如:

profile/1/profile-name

但是当我尝试以下操作时:

RewriteRule ^profile/([0-9]+)/(.*)/?$ profile/view/$1/$2 [NC,L]

它不工作。

换句话说,我只是试图重写原始 url 以删除“查看”操作,以便任何人只需输入配置文件 id (arg1) 和名称 (arg2) 即可访问该 url。

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    您实际上正在做的事情不起作用,因为您正在翻译为友好的 url 而不是 index.php 并且由于您将其定义为 L 规则,那么它将以不存在的 profile/view/1/test 离开,所以您可以将它与你的最后一条规则结合起来,所以它是:

    RewriteRule ^profile/([0-9]+)/(.*)/?$ profile/view/$1/$2 [NC]
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
    

    并且由于第一个匹配将转换 url,它将由第二个规则以正确的格式传递。或者你可以只写正确的目标:

    RewriteRule ^profile/([0-9]+)/(.*)/?$ index.php?url=profile/view/$1/$2 [NC,L]
    

    希望有所帮助

    【讨论】:

    • 实际上,您可能还想将 QSA 添加到您的个人资料视图链接中,以防万一,即 profile/1/test?format=json 会映射到 index.php?url=profile/view/1/test&format=json
    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多