【问题标题】:Htaccess Rewrite Rules for MVCMVC 的 Htaccess 重写规则
【发布时间】:2013-01-15 13:42:24
【问题描述】:

我正忙着为我的 MVC 微框架找出重写规则。我遵循模式 url.com/:controller/:action/:params 但是当请求资产(例如 css、js 或 png)时,我不希望这些被重写.这是我的基本文件夹结构:

index.php
app/
--> Config
--> Controllers
--> Layout
--> Lib
--> Models
--> Views
assets/
--> app/
    --> ...
--> vendor/
    --> ...

所以如果一个请求与我上面描述的 URL 模式匹配,我希望它路由到 index.php 文件。如果它与资产文件夹中的某些内容匹配,我希望它允许它不受影响地通过。

这是我创建的当前 .htaccess 并且一直在来回更改:

RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.(jpg|png|js|css)$

RewriteRule ^([^/]+)(/)([^/]+)(/)(.*) index.php?controller=$1&action=$3&params=$5 [L]
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3&params= [L]
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index&params= [L]
RewriteRule ^([^/]+) index.php?controller=$1&action=index&params= [L]

url 模式匹配得很好,但由于某种原因,对 assets 文件夹的任何请求也会被重写。做了一些不同的测试,我发现 L 标志,据我了解,它的意思是“最后一个”,并没有阻止它处理进一步的重写。

我知道其他人之前必须处理过这个问题,因为 MVC 是一种常见的模式。谁能指出我做错了什么?

【问题讨论】:

    标签: php .htaccess mod-rewrite url-routing


    【解决方案1】:

    尝试排除该文件夹:

    RewriteCond %{REQUEST_URI} ^/assets.*$
    RewriteRule ^(.*)$ - [L,NC]
    

    我使用:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    

    代替:

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    

    【讨论】:

    • 我会被诅咒的。这对我来说太容易了,挣扎了这么久。非常感谢!我会尽快接受。
    • 不客气!它修复了什么?排除文件夹还是更改请求方式?
    • 我实现了这两个...我想排除文件夹有最大的变化。
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多