it-swarm.asia

إعداد وورد مع Permalinks مخصص وليس ملف. htaccess؟

لديّ عميل يفضل بشدة تعطيل ملفات .htaccess لأنهم يرغبون في ضبط تكوينات Apache بأنفسهم. ومع ذلك ، ما زالوا يريدون عناوين URL صديقة لكبار المسئولين الاقتصاديين.

هل هناك طريقة للحصول على الرابط الثابت المخصص مع عدم وجود ملف htaccess؟ يبدو أن بحثي يشير حتى الآن إلى أن هذا غير ممكن ، ولكن ربما يعرف أحد المطورين اللامعين كيف يمكن تحقيق المستحيل على ما يبدو. شكرا لك مقدما!

7
Mike Lee

مرحبًاMike Lee :

للإجابة على سؤالك ، من المفيد فهم كيفية عمل كل شيء.

يخدم Apache عناوين URL التي تطابق الملفات والدلائل

تم تصميم Apache لخدمة الملفات المطابقة بشكل واضح بواسطة URL ، أو لخدمة index.php الموجود في الدليل عندما يتم مطابقة الدليل بشكل صريح.

ولكن يمكن لـ Apache خدمة عناوين URL المتطابقة بواسطة Regex مع mod_rewrite

إذا كنت تريد أن يتطابق Apache مع عناوين URL حيث لا توجد أدلة حقيقية (مثل WordPress والروابط الثابتة) ، يجب أن يكون لديك طريقة لإخبار Apache عن كيفية التعامل مع عناوين URL بشكل مختلف. وهذا بالضبط ما صمم mod_rewrite للسماح به ؛ إنه يمنح مسؤولي الخادم القدرة على تعيين قواعد لمطابقة عناوين URL باستخدام التعبيرات العادية. هذه القواعد توجه النتيجة إلى عناوين URL الأخرى ، وغالبًا ما تتضمن ملفات .PHP الفعلية وأحيانًا يتم تمرير معلمات URL. في النهاية ، تحدد القواعد أنه يتم تحميل الملفات الفعلية.

و mod_rewrite مكوّن مع .htaccess أو httpd.conf

لتكوين mod_rewrite ، يمكنك فقط القيام بذلك داخل .htaccess أو داخل ملف httpd.conf أو أحد الملفات التي يتضمنها ، مثل httpd-vhosts.conf المحتمل. في الواقع أنا مندهش إذا كان لدى العميل المهارات اللازمة للتحكم في Apache أنهم لا يعرفون هذا بالفعل.

يستخدم WordPress دائمًا نفس ملف .htaccess البسيط

الانتقال إلى ما يفعله WordPress ، عندما تقوم بتعيين permalinks ، يكتب WordPress التالي إلى ملف .htaccess ، على افتراض أنه قابل للكتابة (وفي هذا المثال الأول بافتراض أن موقع الويب الخاص بك يتم تقديمه من الجذر):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

تحذير: عندما يكون دليل وورد بريس ليس هو الجذر

إذا تم تقديم موقعك بدلاً من /blogفإن ملف .htaccess المكتوب سيبدو كما يلي:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

يقوم WordPress بتوجيه جميع عناوين URL غير المطابقة/الدليل إلى index.php

كما ترون ، الشيء الوحيد الذي يستخدمه WordPress هو .htaccess for هو تعيينأيURL إلى المجال إلى /index.phpأو /blog/index.php في المثال الثاني) _ (باستثناءعندما يتطابق عنوان URL مع ملف فعلي (مثل صورة .jpg/.gif/.png ، أو ورقة أنماط .css ، أو .js ، أو غير ذلك) أو عندما يتطابق مع دليل فعلي (وهو ما أعرف أنه غير ذي صلة في تثبيت معيار وورد.)

في PHP يوزع WordPress $_SERVER['REQUEST_URI'] لتحديد ما يتم تحميله

داخل كودها PHP ، يستحوذ WordPress على قيمة $_SERVER['REQUEST_URI'] التي تحتوي على طلب عنوان URL الكامل sansالمجال والنظام (أي المخطط http أو https) ثم يقوم بتوزيع القيمة لتحديد عنوان URL المطلوب وبالتالي الصفحات التي يجب تحميل.

تجاوز .htaccess؟ احصل على Apache لتحميل عناوين URL الافتراضية (لكن حظًا سعيدًا بهذا!)

لذلك إذا كنت تريد تجاوز .htaccess بطريقة ما ، فستكون مهمتك هي الحصول على Apache للرد على عنوان URL التعسفي ، ثم تحميل WordPress وتعيين $_SERVER['REQUEST_URI'] ليكون مسار URL بالإضافة إلى المعلمات ؛ IOW خداع ولكن بطريقة جيدة. بعد قولي هذا ، أعرف ما إذا كنت لا تعرف أي طرق ليست معقدة للغاية للقيام بذلك.

التضمين /index.php/ربما؟!؟)

على الرغم من أن * Chris_O * صحيح حول الدفع المسبق /index.php/ لعناوين URL الخاصة بك ، فأنا أزعجك عندما أرى ذلك. إنها تضيف 10 أحرف إلى كل عنوان URL مما يجعلها أطول وأقل أهمية لمحركات البحث ، لكن الأسوأ من ذلك أنها تجعلها أقل قابلية للمشاركة وتبدو خفية للمستخدمين. آسف كريس وأنا أعلم أنك تعني جيدا ، ولكن _ (لاف!

إنشاء دلائل حقيقية لكل عنوان URL (ربما؟)

تتمثل إحدى طرق الحصول على روابط دائمة دون لمس Apache في كتابة نص سينشئ دليلًا فعليًا لكل عنوان URL تريده ثم تخزين index.php هناك من شأنه تحميل WordPress. بالطبع سيكون هذا مجهودًا كبيرًا لتحقيق فائدة صغيرة وسيتطلب الأمر من الخادم أن يكون لديه حق الوصول للكتابة والذي يجب أن يكون أسوأ من استخدام ملف .htaccess.

أكره أن أعترف ، لكن هذا ما فعلته في حوالي عام 1998 من خلال موقع ويب .ASP- عندما لم يكن IIS يدعم إعادة كتابة عنوان URL (وحتى اليوم لا يزال PITA حقيقيًا!) يكره ذلك ولكن عناوين المواقع بالتأكيد كانت كبيرة لكل من المستخدمين وكبار المسئولين الاقتصاديين!

أفضل حل؟ إضافة قواعد إعادة الكتابة إلى httpd.conf

رجوع إلى أفضل الحلول على الأرجح ، و Simon Brownأوصت به فعليًا ؛ أضف قواعد إعادة الكتابة إلى httpd.conf أو أحد ملفات التضمين مثل httpd-vhosts.confوهو كيفية تكوين Apache في localhost على جهاز Mac.) أضف التوجيه التالي مع التأكد من تغيير الدليل لمطابقة الدليل لموقعك:

<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>

علاوة! مع تأمين يأتي الأداء للغاية

يجب أن يلغي هذا الخيار الأخير أي .htaccess ويعيد التحكم في أيديهم. والأفضل من ذلك أنه أكثر أداءً قليلاً حيث يتم تحميل httpd.conf مرة واحدة فقط عند بدء تشغيل Apache ولكن _ (يتم تحميل ملفات .htaccess وتحليلها على كل طلب عنوان URL!

ملاحظة شيء آخر يجب مراعاته هو واجهة Apache الأمامية مع خادم تخزين مؤقت مثل Nginxالذي أعتقد أنه أصبح أفضل ممارسة لمواقع WordPress عالية الحركة التي تحتاج حقًا إلى أن يكون أداء. قد يستغرق الأمر تغييرًا في الحقل الأخضر لأنني لا أعتقد أن معظم الأشخاص يستخدمون Nginx للقيام بإعادة كتابة عنوان URL لـ Apache ولكن إذا كان هذا الاتجاه يثير اهتمامك ، فهناك بعض الروابط التي يجب متابعتها:

15
MikeSchinkel

الرابط الثابت بدون mod_rewrite

بدون ملف .htaccess أو تعديل ملف httpd.conf ، أفضل ما يمكنك فعله هو permininks perminfo. الروابط الدائمة Pathinfo هي نفسها الروابط الدائمة جميلة إلا أنها تبدأ بـ index.php.

لاستخدام pathinfo permalinks ضع index.php/في بداية بنية الرابط الثابت المخصص:

/index.php/%postname%/

راجع مقالة الدستور الغذائي لمزيد من المعلومات.

2
Chris_O

بالعودة إلى الأيام الخوالي ، احتاج WordPress إلى كتابة ملف تهيئة جديد في كل مرة تقوم فيها بتغيير بنية الرابط الثابت. في الاجهزة الحديثة ، RewriteRules لا تتغير:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

يتم تمرير جميع طلبات الملفات غير الموجودة (أي مسار الرابط الثابت المخصص الذي لا يتطابق مع ملف على نظام الملفات) من خلال index.php ، ويخبر $_SERVER['REQUEST_URI'] PHP ما هو المطلوب فعلاً. يمكن لعميلك تعيين قواعد إعادة الكتابة في httpd.conf أو .htaccess ، ولن تحتاج إلى تعديلها وأنت تقوم بتعديل بنية الرابط الثابت.

تحاول بعض الإضافات تعديل .htaccess نفسها ، أو تطلب منك تعديل الملف. هذا الحل قد لا يكون للجميع ، ولكن الأمر يستحق النظر.

0
Annika Backstrom