Hỏi cách remove folder trên uri

Hiện tại mình đang có 1 web test nhỏ với cấu trúc:
mvcorm/
–public/
----.htaccess (2)
----index.php
–.htaccess (1)

Nội dung các file như sau:

.htaccess (file 1)

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>

.htaccess (file 2)

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [PT,L]
</IfModule>

index.php

<?php
    $uri = $_SERVER['REQUEST_URI'];
    echo $uri;

Khi chạy với link: domain.com/mvcorm/controller/method
Thì kết quả là:
/mvcorm/controller/method

cái mvcorm là folder chứa web của mình để test. Sau này chạy thật thì sẽ có 1 tên miền riêng dạng mvcorm.com/controller/method

Vấn đề là mình đang tìm cách lấy uri để tách controller, method,… ra nhưng hiện tại nó cứ có cái mvcorm đằng trước dẫn đến khó xử lý. Sau này nhỡ đặt folder khác, hoặc nó nhiều cấp dạng domain.com/a/b/mvcorm/controller/method thì rất khó xử lý. Các bạn cho hỏi điều chỉnh file .htaccess thế nào để khi chạy link domain.com/mvcorm/controller/method với web hiện tại đặt trong folder mvcorm thì nó cho mình cái uri là controller/method

Cảm ơn mọi người.

1 Like

Nếu Route là cố định thì bạn dùng thử:

$parse = explode('/', $uri);
$controller = $parse[count($parse) - 2];
$method = $parse[count($parse) - 1];

Như vậy không được bạn, với cái hiện tại thì thế là ok nhưng với url khác thì sẽ bị hỏng mất.
VD: domain.com/mvcorm/controller/method => ok
Nhưng mvcorm.com/controller/method => fail

1 Like

Sao lại hỏng?
lúc nào mà nó chả có count >= 2 ?
https://wandbox.org/permlink/RI2FQaGQ7Qn7YEpK

Ah nếu chỉ có controller vs method thì không sao nhưng nếu có cả các tham số nữa thì không được.
Dạng như mvcorm.com/controller/method/var1/var2/

1 Like

Trường hợp này bạn parse $_REQUEST ra sẽ thấy cách giải quyết ngay thôi.
Vì khi bạn rewrite URL, nó chạy toàn bộ vào trong index.php, mọi POST/GET đều chạy vào đó hết rồi, xử lí nó thôi.

Uk vẫn biết là xử trong index.php nhưng không biết xử sao cho phù hợp với các url khác nhau để lấy được bắt đầu từ controller trở đi.

Edit:
Ok mình xử lý bằng cách cùi bắp là cắt tách chuỗi để lấy được từ controller rồi.
Bạn nào cùng cảnh thì có thể dùng thử. Có cách hay thì comment nhé.

define('ROOT', dirname(dirname(__FILE__)));
define('FOLDER_PATH', explode($_SERVER['DOCUMENT_ROOT'], ROOT)[1]);
define('URI', explode(FOLDER_PATH, $_SERVER['REQUEST_URI'])[1]);
echo URI;
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?