سؤال

أنا أقوم ببناء تطبيق في إطار Zend في الوقت الحالي واختباره محليا. لدي MAMP PRO كخادم الويب الخاص بي ولدي SSL موقعة ذاتيا والتي يبدو أن كل شيء يعمل. تأتي مشكلتي عندما أحاول القيام MOD_REWRITE - أنا فقط أحصل على 404 صفحة.

الطريقة التي أقامت بها الأشياء (والتي قد لا تكون أفضل طريقة ...)


في MAMP لدي 2 VirtualHosts قم بإعداد مشيرا إلى نفس دليل الويب (Webroot / Public /):

  • secure.myapp.com.
  • myapp.com.

في الدليل القطني الخاص بي هو ملف index.php الخاص بي وملف .htaccess الخاص بي. محتويات ملف .htaccess هي:

SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

عندما أزور http://myapp.com. كل شيء طرق كما ينبغي استخدام mod_rewrite. ولكن عندما أذهب إلى https://secure.myapp.com. صفحة الفهرس على ما يرام، لكن توجيه URL يتوقف عن العمل ويبدو أنه يتم تجاهل ملف .htaccess.

في SSL.conf لدي ما يلي:

<IfModule mod_ssl.c>

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache         dbm:/Applications/MAMP/logs/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/Applications/MAMP/logs/ssl_mutex

<VirtualHost _default_:443>

SSLEngine on
DocumentRoot "/webroot/public"
ServerName secure.myapp.com
ServerAdmin you@example.com
ErrorLog /Applications/MAMP/logs/ssl_error_log
TransferLog /Applications/MAMP/logs/ssl_access_log

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /Applications/MAMP/conf/apache/ssl_cert/server.crt
SSLCertificateKeyFile /Applications/MAMP/conf/apache/ssl_key/server.key

CustomLog /Applications/MAMP/logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

</IfModule>

هل لدى أي شخص أي أفكار حول هذا؟ سأكون sooooo تقديرا للمساعدة حيث يعيق تنميتي بشكل خطير!

هل كانت مفيدة؟

المحلول

حسنا، أنا متأكد من أنني حصلت على هذا العمل. في الأساس، مشكلة كبيرة لدي هي أن mamm لا يخزن vhosts.conf كملف يمكن الوصول إليه. بدلا من ذلك، هذا ملف تطبيق مستعار.

أعتقد أن ما يحدث هو أن VirtualHosts قد تم إنشاؤها بشكل حيوي بشكل حيوي على منفذ HTTP القياسي، في حالتي 80. ومع ذلك، احتاجت إلى أن أكون قادرا على الوصول إلى التكوين المنفذ 433 Vhost لتمكين FileInfo. لذلك الحل الخاص بي هو التخلي عن ملف .htaccess الخاص بي والعصا التالية كل شيء في ملف SSL.conf الخاص بي.

<IfModule mod_ssl.c>

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache         dbm:/Applications/MAMP/logs/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/Applications/MAMP/logs/ssl_mutex

<VirtualHost mysite.com:443>

    SSLEngine on
    DocumentRoot /webroot/secure
    ServerName mysite.com
    ServerAdmin you@example.com
    ErrorLog /Applications/MAMP/logs/ssl_error_log
    TransferLog /Applications/MAMP/logs/ssl_access_log

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /Applications/MAMP/conf/apache/ssl_cert/server.crt
    SSLCertificateKeyFile /Applications/MAMP/conf/apache/ssl_key/server.key

    CustomLog /Applications/MAMP/logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    DirectoryIndex index.php

        <IfModule mod_rewrite.c>
            RewriteEngine on
            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -s [OR]
            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -l [OR]
            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d

            RewriteRule ^.*$ - [NC,L]
            RewriteRule ^.*$ /index.php [NC,L]

            RewriteLog /Applications/MAMP/logs/ssl_rewrite_log
            RewriteLogLevel 3
        </IfModule>

</VirtualHost>

</IfModule>

اضطررت إلى إضافة document_root أمام الشيكات الخاصة بي والدليل، وقطأت الأمام أمام index.php. إذا كان بإمكاني وضع هذا في "دليل"، فأعتقد أنني كنت قد تجنب هذه التغييرات، لكن Apache لن يتم إعادة تشغيله عند إضافة هذه المعلمة.

الشيء الوحيد الذي لم أحاول أنه كان يضيف المعلومات إلى httpd.conf mamp، ولكن لدي شعور قد تكون نفس القيود قد تكون في مكانها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top