2013-06-04 39 views
6

Tôi đang cố gắng tạo các ghi đè mặt nạ thân thiện với SEO trong .htaccess. Tệp htaccess hoạt động tốt trên máy chủ cục bộ và máy chủ cá nhân của tôi, nhưng có vẻ như không may không hoạt động trên các máy chủ của GoDaddy. Tôi biết rằng đó là một vấn đề ở đó, Nhưng làm việc cho một khách hàng của những người đặt trên sử dụng Godaddy như máy chủ của họ..htaccess nối chuỗi truy vấn vào chuyển hướng nội bộ

Vấn đề là viết lại dường như đang buộc chuyển hướng hiển thị chuỗi truy vấn được viết lại trong thanh URL của trình duyệt thay vì giữ nội bộ. ví dụ:

Rule:

RewriteRule ^/?([a-zA-Z0-9-_/]*)$ /index.php?loadPage=$1&mode=cms [L,QSA] 

Link: /images Đang chuyển hướng đến /images/?loadPage=images&mode=cms

này “nên” ở lại như /images/ cho trình duyệt. Tôi đã sao chép của tôi ngắn .htaccess dưới đây, IP sửa đổi cho khối phát triển

<Files .htaccess> 
    deny from all 
</Files> 

Options -MultiViews +FollowSymlinks -Indexes 

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} "/old/" 
RewriteRule (.*) $1 [L] 

# Under construction Redirect 
RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
RewriteCond %{REQUEST_URI} !^/?old/ 
RewriteRule ^/?(.*) “/old/$1″ [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^/?admin/?(.*)$ /index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites -- this one is failing 
RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 

Một chút lưu ý tiềm năng là các url hiển thị là /images/?query_string, KHÔNG index.php?query_string, vì vậy nó không phải làm một chuyển hướng đầy đủ, mặc dù yêu cầu bên ngoài được nhận phản hồi 301 từ yêu cầu trang.

+0

Vui lòng tham khảo các liên kết sau hoặc bạn cũng có thể liên hệ với nhóm hỗ trợ http://support.godaddy.com/groups/web-hosting/forum/topic/problem-using-htaccess-for-url-rewrite/ và http://support.godaddy.com/groups/web-hosting/forum/topic/how-do-i-use-htaccess-to-redirect-my-document-root-and-mask-the-url/? sid = & sp = 1 –

+0

Cảm ơn bạn đã liên kết, rất tiếc là tôi đã điều tra cả hai liên kết và dường như không áp dụng cho trường hợp của tôi. –

Trả lời

2

tôi đã không kiểm tra bất cứ điều gì mà chỉ đơn giản nhìn vào dòng đó ...

RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 

có một lỗi cú pháp. Dấu gạch ngang sau 9 nên được thoát như kỹ thuật là một chỉ báo phạm vi. Hầu hết thời gian bạn thấy mọi người đặt nó vào cuối trước ] và do đó, nó không gây ra lỗi và vì vậy hầu hết mọi người nghĩ rằng họ không phải thoát khỏi nó. Bạn cũng không cần phải thoát khỏi dấu gạch chéo về phía trước. Cũng sử dụng dấu hỏi làm cho tùy chọn trước đó, và không biết tại sao bạn muốn điều đó. Vì vậy, cần phải như sau:

RewriteRule ^([a-zA-Z0-9\-_]+)/?$ /index\.php?loadPage=$1&mode=cms [QSA,L] 
+0

Dấu gạch chéo tùy chọn là do một số trình bổ sung trình duyệt "tuyệt vời" loại bỏ dấu gạch chéo sau từ các liên kết nếu không có gì hiện diện sau dấu gạch chéo (liên quan đến bảo mật). Thật kỳ lạ, viết lại không hoạt động chính xác nếu tôi truy cập bằng dấu gạch chéo, nhưng sẽ không hoạt động nếu nó không tồn tại. Việc viết lại quản trị ban đầu làm điều tương tự (chỉ cần ít cầu kỳ), và hoạt động hoàn hảo, vì vậy tôi nghĩ rằng bạn lên một cái gì đó với cách các giá trị phù hợp đang được giải thích.Tôi sẽ làm một số chi tiết chơi xung quanh với nó. (không may thay đổi được đề xuất không thay đổi vấn đề). –

+0

Tôi đã thêm chuyển hướng 301 cho bất kỳ liên kết đến nào không có dấu gạch chéo để nối thêm và có các quy tắc hoạt động theo cách tôi muốn. Thay vào đó sẽ có tùy chọn trong một quy tắc, nhưng nó hoạt động ít nhất, lol. Cảm ơn bạn đã cho tôi đi đúng hướng! –

0

Tôi đã nhận xét một số quy tắc khác để bạn có thể biết điều gì đang xảy ra. Bạn đã lấy bất cứ thứ gì không bắt đầu bằng "cũ" và viết lại nó vào thư mục cũ. Quy tắc trước trông giống như bạn đang lấy mọi thứ bạn tìm thấy từ '/ old /' và bạn đang chuyển hướng nó đến chính nó. Bạn sẽ không nhận được bất kỳ yêu cầu nào từ 0.0.0.0 bao giờ hết.

Dấu gạch ngang trong quy tắc cuối cùng của bạn cần phải đi đến cuối dấu ngoặc để Apache không tìm kiếm dải ô.

Vì chúng tôi đang xử lý .htaccess, chúng tôi không cần các dấu gạch chéo trước nếu chúng tôi không sử dụng REQUEST_URI.

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} ^/old/(.*)$ 
RewriteRule .* %1 [L] 

# Under construction Redirect 
# RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
# RewriteCond %{REQUEST_URI} !^/?old/ 
# RewriteRule ^/?(.*) /old/$1 [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^admin/(.*)$ index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites 
RewriteCond %{REQUEST_FILENAME} !^index.php$ 
RewriteRule ^([A_Za-z0-9_-]+)/?$ index.php?loadPage=$1&mode=cms [QSA,L] 
+0

IP 0.0.0.0 là trình giữ chỗ cho IP tôi đang truy cập máy chủ để phát triển. Tôi đồng ý tôi là một chút lười biếng với dấu nối, tuy nhiên Apache bình thường có thể tìm ra nó vì không có ký tự phạm vi sau đây. Tôi đã thử nghiệm những thay đổi này và rất tiếc sự cố vẫn tiếp diễn. Tôi cũng đã nhận xét mọi quy tắc khác ngoài RewriteEngine và giao diện người viết lại, và vẫn là kết quả tương tự, vì vậy nó dường như không phải là xung đột quy tắc. –

Các vấn đề liên quan