ฉันจะลบสิ่งที่"index.php"
ยื่นออกมาในทุกเส้นทางใน Codeigniter ที่ใดที่หนึ่งตรงกลางได้อย่างไร ฉันต้องการที่ไม่สะอาดindex.php-fied URLs
?
ฉันจะลบสิ่งที่"index.php"
ยื่นออกมาในทุกเส้นทางใน Codeigniter ที่ใดที่หนึ่งตรงกลางได้อย่างไร ฉันต้องการที่ไม่สะอาดindex.php-fied URLs
?
คำตอบ:
หากคุณกำลังใช้ Apache ให้วางไฟล์. htaccess ในไดเรกทอรีเว็บรูทของคุณที่มีสิ่งต่อไปนี้:
RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
อีกรุ่นที่ดีตั้งอยู่ที่นี่:
RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
ฉันมีปัญหาใหญ่บางอย่างกับการลบ index.php ตามกฎทั่วไป. htaccess ด้านล่างนี้ได้รับการทดสอบบนเซิร์ฟเวอร์หลายเครื่องและโดยทั่วไปใช้งานได้:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
<Files "index.php">
AcceptPathInfo On
</Files>
หากคุณไม่มีโชคกับสิ่งนั้นขั้นตอนต่อไปคือการปรับไฟล์กำหนดค่าของคุณ ลองใช้โปรโตคอล URI อื่น ๆ เช่น
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
$config['uri_protocol'] = 'ORIG_PATH_INFO';
หากคุณยังไม่มีโชคให้ลองเปลี่ยนกฎการเขียนซ้ำเพื่อรวมโฟลเดอร์ย่อยของคุณ ปัญหานี้มักเป็นปัญหาหากคุณใช้ URL ชั่วคราวบนเซิร์ฟเวอร์ dev เป็นต้น:
RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]
เพียงแค่ลองเล่นกับตัวเลือกเหล่านี้ก็น่าจะใช้ได้ ตรวจสอบให้แน่ใจว่าไฟล์ดัชนีของคุณถูกตั้งค่าเป็น:
$config['index_page'] = '';
โชคดี!
มีไฟล์. htaccess ในไดเร็กทอรี root ของแอ็พพลิเคชันพร้อมกับไฟล์ index.php (ตรวจสอบว่าส่วนขยาย htaccess ถูกต้อง Bz htaccess.txt ไม่ได้ผลสำหรับฉัน)
และเพิ่มกฎต่อไปนี้ในไฟล์. htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
จากนั้นค้นหาบรรทัดต่อไปนี้ในไฟล์ application / config / config.php ของคุณ
$config['index_page'] = 'index.php';
ตั้งค่าตัวแปรว่างตามด้านล่าง
$config['index_page'] = '';
เพียงเท่านี้มันก็ได้ผลสำหรับฉัน
หากไม่ได้ผลต่อไปให้ลองแทนที่ตัวแปรต่อไปนี้ด้วยพารามิเตอร์เหล่านี้ ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' และ 'ORIG_PATH_INFO') ทีละรายการ
$config['uri_protocol'] = 'AUTO';
ดูในsystem\application\config\config.php
ไฟล์มีตัวแปรชื่อindex_page
ควรมีลักษณะดังนี้
$config['index_page'] = "index.php";
เปลี่ยนเป็น
$config['index_page'] = "";
ตามที่กล่าวไว้คุณต้องเพิ่มกฎการเขียนซ้ำลงใน.htaccess
ไฟล์
หมายเหตุ: ใน CodeIgniter v2 ไฟล์นี้ถูกย้ายออกจากโฟลเดอร์ระบบไปที่ application\config\config.php
วิธีการทั้งหมดข้างต้นล้มเหลวสำหรับฉันและจากนั้นฉันพบว่าฉันไม่ได้เปลี่ยนAllowOverride Noneเป็นAllowOverride Allในไฟล์โฮสต์เสมือนของฉันที่/ etc / apache2 / sites-available / default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All <---- replace None with All
</Directory>
<Directory /var/www >
Options Indexes FollowSymLinks MultiViews
AllowOverride All <--- replace None with All
Order allow,deny
allow from all
</Directory>
...
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]
หลังจากเปลี่ยน RewriteRule. * index.php / $ 0 [PT, L] ด้วยชื่อโฟลเดอร์โครงการ "codeigniter" มันทำงานให้ฉัน ขอบคุณสำหรับการสนับสนุนของคุณ
ขั้นตอนที่ 1 => วางไฟล์. htaccess ของคุณในโฟลเดอร์รูทที่มีแอพพลิเคชั่นและโฟลเดอร์ระบบ
ขั้นตอนที่ 2 => หากเส้นทางเว็บของคุณใช้โฟลเดอร์ย่อยเช่น - yourdomain.com/project/ - ให้ใช้รหัสต่อไปนี้ในไฟล์ htaccess
RewriteEngine on
RewriteBase /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]
หากเส้นทางเว็บของคุณใช้รูทโฟลเดอร์เช่น yourdomain.com ให้ใช้รหัสต่อไปนี้ในไฟล์ htaccess
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
แค่คิดว่าฉันอาจจะเพิ่ม
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
จะเป็น. htaccess และอย่าลืมแก้ไขตัวแปร application / config.php ของคุณในลักษณะต่อไปนี้:
แทนที่
$config['uri_protocol'] = “AUTO”
กับ
$config['uri_protocol'] = “REQUEST_URI”
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
อย่างนี้ต้องได้ผลแน่นอน.. ได้ลอง
ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งานmod_rewrite
(ฉันไม่มี)
การเปิดใช้งาน:
sudo a2enmod rewrite
นอกจากนี้แทนที่AllowOverride None
ด้วยAllowOverride All
sudo gedit /etc/apache2/sites-available/default
Finaly ...
sudo /etc/init.d/apache2 restart
. htaccess ของฉันคือ
RewriteEngine on
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
actions
: stackoverflow.com/questions/14419757/...
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
นี่คือ. htaccess สำหรับหนึ่งในโครงการ CI ของฉัน:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /projectFolder/index.php/$1 [L]
บรรทัดสุดท้ายควรให้สิ่งที่คุณต้องการแม้ว่าคุณอาจต้องการหรือไม่ต้องการ "/ projectFolder" ขึ้นอยู่กับวิธีการตั้งค่าโครงสร้างโฟลเดอร์ของคุณ โชคดี!
ใช้mod_rewrite
ตามคำแนะนำในบทช่วยสอนนี้จาก CI wiki
ในฐานะที่เป็นไฟล์. htaccess ตัวเลือกที่ดีคือการใช้ไฟล์ที่Kohana Frameworkจัดเตรียมไว้ให้:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
มันเป็น. htaccess ที่ได้ผลดี
มีสองวิธีในการแก้ index.php ในเส้นทาง url สำหรับ codeigniter
1: ใน config / config.php เปลี่ยนรหัส:
$config['index_page'] = 'index.php';
ถึง
$config['index_page'] = '';
2: สร้าง. htacess ในรูทพา ธ หากไม่ได้สร้างให้คัดลอกโค้ดต่อไปนี้: -
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
บันทึกแล้วตรวจสอบใน Apache Configuration rewrite_module OR mod_rewrite ถูกเปิดใช้งานหากไม่เป็นเช่นนั้นโปรดเปิดใช้งาน (แนวทางที่ดีที่สุด)!
ฉันทดสอบสิ่งนี้บน apache2 บนโฮสติ้งที่แตกต่างกันและใช้งานได้ดี
ใช้ htaccess นี้
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
จะแน่ใจว่าคุณได้enabled mod_rewirte
ด้วยphpinfo();
จากนั้นทำใน config / config.php:
$config['index_url'] = '';
|
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';
หากยังไม่ได้ผลให้ลองเปลี่ยนเป็นไฟล์$config['uri_protocol']='AUTO'
ภายในที่ระบุไว้application/config/config.php
ในบรรทัด 40/54:
บางครั้งฉันใช้: REQUEST_URI
แทนAUTO
หรือ"QUERY_STRING"
สำหรับโฮสติ้งของ goDaddy
ดูใน\application\config\config.php
ไฟล์มีตัวแปรชื่อindex_page
ควรมีลักษณะดังนี้
$config['index_page'] = "index.php";
เปลี่ยนเป็น
$config['index_page'] = "";
จากนั้นตามที่กล่าวไว้คุณต้องเพิ่มกฎการเขียนซ้ำลงใน.htaccess
ไฟล์เช่นนี้:
RewriteEngine on
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
มันได้ผลสำหรับฉันหวังว่าคุณจะเช่นกัน
หากคุณใช้ linux และใช้เซิร์ฟเวอร์ apache2 เราอาจต้องแทนที่ไฟล์ apache2.conf ข้างการเปลี่ยนแปลงในไฟล์. htaccess ค้นหาแฟ้มการกำหนดค่า apache2 บน/etc/apache2/apache2.conf
Search Directory / var / www / Change AllowOverride None -> AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory
วางไฟล์. htaccess ในไดเรกทอรีเว็บรากของคุณ
ไม่ว่าคุณจะปรับแต่งอะไร - หากไม่เป็นไปตามข้างต้นจะไม่ได้ผล โดยปกติจะอยู่ในโฟลเดอร์ System ควรอยู่ในรูท ไชโย!
application
ไดเร็กทอรีแทนที่จะเป็น root
ฉันได้ลองวิธีแก้ปัญหามากมาย แต่สิ่งที่ฉันคิดขึ้นมาคือ:
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]
สิ่งนี้จะลบ index.php ออกจาก url ตามต้องการ
ฉันใช้บรรทัดเหล่านี้ใน.htaccess
ไฟล์ ซึ่งฉันวางไว้ในโฟลเดอร์รูท
RewriteEngine on
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
จากนั้นฉันสามารถเข้าถึงhttp://example.com/controller/function/parameter
แทนhttp://example.com/index.php/controller/function/parameter
สิ่งนี้จะช่วยคุณวางรหัสนี้ในโฟลเดอร์ของแอปพลิเคชันในไฟล์. htacess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
php_value short_open_tag 1
</IfModule>
อันนี้ทำให้ฉันมีเวทมนตร์ที่สมบูรณ์:
RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
หวังว่าจะช่วยได้!
สวัสดีคนนี้ทำงานให้ฉัน
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]
เช่นเดียวกับสิ่งนี้
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]
โดยที่โฟลเดอร์คือชื่อของโฟลเดอร์ย่อยหากแอปพลิเคชัน codeigniter นี้โฮสต์เป็นโดเมนย่อยเช่น domainname / folder / index.php
หวังว่าจะเหมาะกับคุณ ขอบคุณ
คัดลอกรหัสต่อไปนี้ใน. htaccess ของคุณ
RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
ขั้นตอนที่ 1 :
เพิ่มสิ่งนี้ในไฟล์ htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
ขั้นตอนที่ 2 :
ลบ index.php ในการกำหนดค่า codeigniter
$config['base_url'] = '';
$config['index_page'] = '';
ขั้นตอนที่ 3:
อนุญาตให้ลบล้าง htaccess ใน Apache Configuration (Command)
sudo nano /etc/apache2/apache2.conf และแก้ไขไฟล์และเปลี่ยนเป็น
AllowOverride All
สำหรับโฟลเดอร์ www
ขั้นตอนที่ 4:
เปิดใช้งาน apache mod rewrite (Command)
sudo a2enmod เขียนใหม่
ขั้นตอนที่ 5:
รีสตาร์ท Apache (คำสั่ง)
sudo /etc/init.d/apache2 restart