2012-01-17 31 views
6

Tôi có một .htaccess ánh xạ miền vào một thư mục.Chỉnh sửa .htaccess với PHP

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

Có cách nào để chỉnh sửa/thêm bản đồ miền phụ vào tệp bằng PHP không?

Đơn giản, tôi muốn lấy nội dung của tệp .htaccess và thêm vào chúng bằng cách sử dụng tập lệnh PHP.

+0

Nooooooooooooookhông bao giờ chỉnh sửa.htaccess với PHP, bạn chỉ yêu cầu các vấn đề an ninh ... – Cyclone

+6

@ Cyclone: ​​Nếu nó được thực hiện đúng cách nó không phải là một nguy cơ bảo mật. – ThiefMaster

+0

Không có gì được nêu ra và tôi đã nhìn xung quanh trong một thời gian khá, xin lỗi nếu nó rất nhiều. Tôi là một nhà phát triển mới làm quen. Cpanel giống như của nó và cách chuyển hướng http được thêm vào đó. –

Trả lời

3

Như được đề xuất trong một trong các nhận xét ở trên, tốt hơn nên sử dụng RewriteMap cho trường hợp của bạn ở đây thay vì cố gắng chỉnh sửa .htaccess từ mã PHP trực tiếp. Dưới đây là một ví dụ làm thế nào để sử dụng nó:

  1. Add sau dòng để file httpd.conf của bạn:

    RewriteMap domainMap txt://path/to/domain-dir.txt 
    
  2. Tạo một file văn bản như /path/to/domain-dir.txt như thế này:

    sub1 /subdir1 
    sub2 /foodir2 
    foo /bar 
    
  3. Thêm các dòng này vào tệp .htaccess của bạn:

    Options +FollowSymLinks -MultiViews 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
    RewriteRule ^$ ${domainMap:%1} [L,R] 
    

có hiệu quả tất cả các điều này có nghĩa là phải có những chuyển hướng tại chỗ:

  • sub1.domain.com/ => sub1.domain.com/subdir1
  • sub2.domain.com/ => sub2.domain.com/foodir2
  • foo.domain.com/ => foo.domain.com/bar

Ưu điểm: Với thiết lập này tại chỗ, bạn có thể chỉnh sửa hoặc tạo lại tệp /path/to/domain-dir.txt làm muc h như bạn muốn từ mã php của bạn mà không cần mở một lỗ hổng bảo mật lớn được cho phép php code o chỉnh sửa .htaccess trực tiếp.

+0

Có cách nào để thực hiện việc này mà không có tệp httpd.conf không? Tôi đang ở trên lưu trữ được chia sẻ. –

+0

Thật không may là không vì chỉ thị 'RewriteMap' chỉ đi vào tập tin httpd.conf. Tuy nhiên nó sẽ chỉ là ** một lần ** thay đổi trong httpd.conf. – anubhava

3

Điều này có thể làm việc cho tình hình của bạn:

Ammend các .htaccess nhìn như sau:

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

###CUSTOM RULES### 

php script giả sử $ quy tắc giữ các quy tắc tạo mới được ammended;

$htaccess = file_get_contents('/path/to/.htaccess'); 
$htaccess = str_replace('###CUSTOM RULES###', $rules."\n###CUSTOM RULES###", $htaccess); 
file_put_contents('/path/to/.htaccess', $htaccess); 

ví dụ trên là lý thuyết và chưa được kiểm tra, sẽ phụ thuộc vào quyền truy cập .htaccess và quyền của tập lệnh.

1

Bạn có thể sử dụng htaccess sau đây để ánh xạ bất kỳ miền nào khác ngoài maindomain.com vào thư mục có cùng tên với tên miền.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} (.*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

cách khác; để ánh xạ thư mục với tên miền không có tên miền.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} ^([^\.]*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

Không chính xác những gì bạn muốn, nhưng nó có thể phù hợp với bạn và không cần bất kỳ php nào.

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