Tôi muốn mod_rewrite URL vào một trang khác, nhưng sau đó tôi cũng muốn bất kỳ chuỗi truy vấn nào được thêm vào để được giữ nguyên.Tôi làm cách nào để mod_rewrite và giữ chuỗi truy vấn?
RewriteEngine On
#enforce trailing slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !#
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://localhost/siteroot/$1/ [L,R=301]
RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1
Vì vậy, nếu người dùng truy cập apps/app1/
, index.php?app=app1
được hiển thị. Tuy nhiên, tôi muốn có thể duy trì các chuỗi truy vấn tùy chọn để truy cập apps/app1/?variable=x
trả về index.php?app=app1&variable=x
.
Quy tắc/điều kiện mod_rewrite nào sẽ làm cho điều này xảy ra?
Cảm ơn, tôi đã không nhận ra điều đó thật đơn giản. –
+1 Đồng ý với @DanielOakey .. Tôi đã cố gắng để hack một cái gì đó với regex và nó không hoạt động .. –
Để làm rõ, nó không phải về viết lại vs chuyển hướng. http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa nói: Khi URI thay thế chứa chuỗi truy vấn, hành vi mặc định của RewriteRule là hủy bỏ chuỗi truy vấn hiện tại và thay thế nó với bản mới được tạo. Sử dụng cờ [QSA] làm cho các chuỗi truy vấn được kết hợp. –