Làm cách nào để cho phép khai báo tuyến đường tải các khung nhìn trong tệp riêng biệt trong Apache2?


1

Trang web của tôi với khung PHP của riêng tôi cho phép có các url đẹp cho các trang:

About Us  =>  https://www.myurl.com/about
Contacts  =>  https://www.myurl.com/contacts

Nó hoạt động tốt trong thiết lập cục bộ Vagrant, nhưng một khi tôi tải trang web của mình lên Apache2 thì các trang web đó sẽ bị ném:

Không tìm thấy URL / about được yêu cầu trên máy chủ này

URL / danh bạ được yêu cầu không tìm thấy trên máy chủ này.

Có lẽ bởi vì ưu tiên của nó là tìm kiếm một tệp trong các thư mục "about" và "danh bạ" thay vì nghe /index.phptệp xác định tuyến đường và tải chế độ xem cho khoảng hoặc các trang liên hệ.

Xem trong https://www.myurl.comtrang chủ hoạt động hoàn hảo, sự cố xảy ra với các trang được khai báo trong URI sauhttps://www.myurl.com/.....

Đây là tập tin .conf của tôi

ServerAdmin info@myurl.com
ServerName myurl.com
ServerAlias www.myurl.com
DocumentRoot /var/www/myurl.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.myurl.com [OR]
RewriteCond %{SERVER_NAME} =myurl.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}      [END,NE,R=permanent]

1
Vui lòng chỉnh sửa câu hỏi và đăng nội dung của .conftệp máy chủ ảo của bạn .
pa4080

2
Và dưới /var/www/myurl.com/public_htmlcó hai thư mục phụ about/contacts/phải không? Tôi nghĩ rằng tệp cấu hình phải chi tiết hơn, cũng cần có các <Directory>định nghĩa và, ngoài ra, bạn có thể tránh các quy tắc Rewrite cho tác vụ này. Tôi sẽ đăng cấu hình ưa thích của tôi cho trường hợp này.
pa4080

@ pa4080 Không, không có thư mục con about/, contacts/cấu hình trong /var/www/myurl.com/public_html/index.phptrang được thực hiện rằng: nếu người dùng truy cập url : myurl.com/about, mã sẽ hiển thị mã html được lưu trữ trong/var/www/myurl.com/public_html/views/about-us.view.php
Lukas

Câu trả lời:


1

Sau khi thêm các dòng này vào tệp .htaccess của tôi, định tuyến cuối cùng đã hoạt động:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

Trước đây khi tôi đang https://www.myurl.com/abouttìm kiếm một tập tin index.php bên trong /var/www/myurl.com/public_html/about/thư mục.

Với mã mới trong .htaccess khi tôi truy cập https://www.myurl.com/abouttệp .htaccess, ưu tiên tìm kiếm cho chế độ xem như được xác định trong index.phptệp và nếu nó không tải bất kỳ chế độ xem nào, nó sẽ tìm kiếm một thư mục có tên cụ thể.


Tôi chỉ nghĩ rằng bạn cần RewriteRule như thế này :) Bởi vì tôi không thể tưởng tượng được chương trình php sẽ xử lý các yêu cầu không trỏ đến nó như thế nào.
pa4080

1

Tôi không có ý tưởng chính xác tại sao cấu hình trên hoạt động trên Vagrant mà không phải trên Apache bản địa. Kinh nghiệm của tôi cho tôi thấy rằng, khi cấu hình của Apache không đủ nghiêm ngặt, đôi khi nó hoạt động và đôi khi nó không hoạt động. Đặc biệt là khi bạn đã di chuyển từ phiên bản này sang phiên bản khác của Apache. Ngoài ra, nhiều lần tôi đã đọc được rằng nên tránh sử dụng các quy tắc Rewrite nếu có thể.

Vì vậy, tôi muốn thiết lập máy chủ ảo của mình với tệp cấu hình riêng biệt, trông giống như vậy:

ServerName myurl.com # Remove this line if there is another ServerName directive at the global level, or change it to 'ServerName localhost' if you want.

<VirtualHost *:80>  
        ServerName myurl.com
        ServerAlias www.myurl.com
        ServerAdmin info@myurl.com
        ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
        CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined   

        # Redirect Requests to HTTPS
        Redirect permanent "/" "https://myurl.com/"
</VirtualHost>

<IfModule mod_ssl.c>    
<VirtualHost _default_:443>
        ServerName myurl.com
        ServerAlias www.myurl.com
        ServerAdmin info@myurl.com
        ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
        CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined   

        DocumentRoot /var/www/myurl.com/public_html
        <Directory /var/www/myurl.com/public_html>
               Options None FollowSymLinks
               AllowOverride None 
               # Use 'AllowOverride All' to enable all .htaccess overrides
               DirectoryIndex index.html index.php
               Order allow,deny
               Allow from all
               Require all granted
        </Directory>

        SSLEngine on
        SSLCertificateFile /path/to/your/cert.file
        SSLCertificateKeyFile /path/to/your/privkey.file
        SSLCertificateChainFile /path/to/your/chain.file
</VirtualHost>
</IfModule>

Tạo tập tin cấu hình mới : /etc/apache2/sites-available/myurl.com.conf. Nơi bạn nên dán và sửa đổi các dòng trên.

Vô hiệu hóa tập tin cấu hình hiện tại. Có lẽ bạn nên sử dụng a2dissite. Sau đó kích hoạt tệp cấu hình mới : sudo a2ensite myurl.com.conf. Và khởi động lại Apache. Tôi nghĩ rằng nó nên làm việc bây giờ.

Ngoài ra, trong buồng cấu hình ở trên http://myurl.comhttp://www.myurl.comsẽ chuyển hướng tất cả các yêu cầu đến https://myurl.com. Tuy nhiên, địa chỉ https://www.myurl.comsẽ có thể truy cập khi được yêu cầu. Nếu bạn muốn chuyển hướng như sau:

  • http://myurl.comđến https://myurl.com

  • http://www.myurl.comđể https://www.myurl.com.

Bạn nên xóa chỉ thị ServerAliaskhỏi <VirtualHost *:80>định nghĩa và tạo một lệnh khác:

<VirtualHost *:80>  
        ServerName myurl.com
        ...
        Redirect permanent "/" "https://myurl.com/"
</VirtualHost>

<VirtualHost *:80>  
        ServerName www.myurl.com
        ...
        Redirect permanent "/" "https://www.myurl.com/"
</VirtualHost>

...

1
Cảm ơn bạn rất nhiều vì câu trả lời của bạn, tôi đã nghiên cứu nó rất nhiều, trước khi phát hiện ra vấn đề của tôi.
Lukas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.