วิธีทำ clean url บน drupal 6

drupal-icon-3d-small
clean url ของ drupal มีประโยชน์ก็เพื่อทำให้ url นั่นอ่านง่ายขึ้นจากปกติจะมี ? อยู่ใน url เช่น

https://killthewhat.com/drupal/?q=admin/settings/clean-urls

เมื่อใช้ Clean URL ก็จะเป็น

https://killthewhat.com/drupal/admin/settings/clean-urls

โดยเมื่อตอนติดตั้ง drupal ครั้งที่แล้วผมได้ติดในเรื่องนี้ไว้ดังภาพ

ซึ่งวิธีแก้ไขก็ไม่ยากครับให้เราเข้าไปแก้ไขไฟล์ .htaccess ในที่เราติดตั้ง drupal เอาไว้ (ใครไม่มี .htaccess ให้สร้างเองได้ครับ) เช่น /httpdocs หรือ /httpdocs/drupal เป็นต้น และใส่ค่านี้ลงไปครับทับของเดิม

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$">
  Order deny,allow
  Deny from all
</FilesMatch>

# Set some options.
Options -Indexes
Options +FollowSymLinks

# Customized error messages.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
</IfModule>

# PHP 4, Apache 2
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
</IfModule>

# PHP 5, Apache 1 and 2
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
</IfModule>

# Reduce the time dynamically generated pages are cache-able.
<IfModule mod_expires.c>
  ExpiresByType text/html A1
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # If your site can be accessed both with and without the prefix www.
  # you can use one of the following settings to force user to use only one option:
  #
  # If you want the site to be accessed WITH the www. only, adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
  # RewriteRule .* http://www.example.com/ [L,R=301]
  #
  # If you want the site to be accessed only WITHOUT the www. , adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
  # RewriteRule .* http://example.com/ [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory and
  # the rewrite rules are not working properly.
  RewriteBase /

  # Rewrite old-style URLs of the form 'node.php?id=x'.
  #RewriteCond %{REQUEST_FILENAME} !-f
  #RewriteCond %{REQUEST_FILENAME} !-d
  #RewriteCond %{QUERY_STRING} ^id=([^&]+)$
  #RewriteRule node.php index.php?q=node/view/%1 [L]

  # Rewrite old-style URLs of the form 'module.php?mod=x'.
  #RewriteCond %{REQUEST_FILENAME} !-f
  #RewriteCond %{REQUEST_FILENAME} !-d
  #RewriteCond %{QUERY_STRING} ^mod=([^&]+)$
  #RewriteRule module.php index.php?q=%1 [L]

  # Rewrite rules for static page caching provided by the Boost module
  # BOOST START
  <IfModule mod_mime.c>
  AddCharset utf-8 .html
  </IfModule>
  RewriteCond %{REQUEST_URI} !^/cache
  RewriteCond %{REQUEST_URI} !^/user/login
  RewriteCond %{REQUEST_URI} !^/admin
  RewriteCond %{HTTP_COOKIE} !DRUPAL_UID
  RewriteCond %{REQUEST_METHOD} ^GET$
  RewriteCond %{QUERY_STRING} ^$
  RewriteCond %{DOCUMENT_ROOT}/cache/%{SERVER_NAME}/0/%{REQUEST_URI} -d
  RewriteCond %{DOCUMENT_ROOT}/cache/%{SERVER_NAME}/0/%{REQUEST_URI}/index.html -f
  RewriteRule ^(.*)$ cache/%{SERVER_NAME}/0/$1/index.html [L]
  RewriteCond %{REQUEST_URI} !^/cache
  RewriteCond %{REQUEST_URI} !^/user/login
  RewriteCond %{REQUEST_URI} !^/admin
  RewriteCond %{HTTP_COOKIE} !DRUPAL_UID
  RewriteCond %{REQUEST_METHOD} ^GET$
  RewriteCond %{QUERY_STRING} ^$
  RewriteCond %{DOCUMENT_ROOT}/cache/%{SERVER_NAME}/0/%{REQUEST_URI}.html -f
  RewriteRule ^(.*)$ cache/%{SERVER_NAME}/0/$1.html [L]
  # BOOST END

  # Rewrite current-style URLs of the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# $Id: boosted.txt,v 1.4 2006/12/05 10:39:19 arto Exp $

*** โดยให้แก้ไข RewriteBase / ไปเป็น RewriteBase /drupal ถ้าใครติดตั้ง drupal เป็น subdirectory ***
ซึ่งถ้า hosting นั้นรองรับ mod_rewrite เราก็จะสามารถแก้ไขให้ clear url เป็น enable ได้ โดยให้ไปที่ Administrator >> Site configuration >> Clean URLs แล้วปรับเป็น Enabled ดังรูปจากนั้นกด Save Configuration
drupal

เพียงเท่านี้ url ของเราก็จะไม่มี ? แล้วส่วนใครที่ ติดตั้ง drupal ผ่าน Plesk Control Panel ก็สบายเลยครับเพราะไม่ต้องทำไรมากเพียงแค่เข้าไป Administrator >> Site configuration >> Clean URLs เพื่อปรับให้เป็น Enable ก็เพียงพอแล้ว

via : http://drupal.org/node/121834

บทความแนะนำ
  • ขอบคุณมากครับ หา .htaccess ตั้งหลายบล็อก ทำได้ซะที
blog comments powered by Disqus