01/10/2018, 14:37

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.

Dark.Hades viết 16:39 ngày 01/10/2018

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];
Quân viết 16:37 ngày 01/10/2018

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

Dark.Hades viết 16:42 ngày 01/10/2018

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

Quân viết 16:50 ngày 01/10/2018

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/

Dark.Hades viết 16:38 ngày 01/10/2018

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.

Quân viết 16:52 ngày 01/10/2018

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;
Bài liên quan
0