ลบนามสกุล. php ด้วย. htaccess


103

ใช่ฉันได้อ่านคู่มือ Apache และค้นหาที่นี่ ด้วยเหตุผลบางอย่างฉันไม่สามารถทำให้สิ่งนี้ทำงานได้ สิ่งที่ใกล้เคียงที่สุดที่ฉันได้มาคือการลบส่วนขยายออก แต่จะชี้กลับไปที่ไดเรกทอรีราก ฉันต้องการให้มันทำงานในไดเร็กทอรีที่มี.htaccessไฟล์

ฉันต้องทำสามสิ่งกับ.htaccessไฟล์

  1. ฉันต้องการมันเพื่อลบ. php

    ก. ฉันมีหลายเพจที่ใช้แท็บและURLดูเหมือน page.php # tab - เป็นไปได้ไหม

    ข. ฉันมีหน้าหนึ่งที่ใช้รหัสเซสชันต่อท้าย URL เพื่อให้แน่ใจว่าคุณมาถูกที่www.domain.com/download-software.php?abcdefgแล้ว

เป็นไปได้หรือไม่ นอกจากนี้ในการดำเนินการนี้ฉันจำเป็นต้องลบ ".php" ออกจากลิงก์ในไฟล์ nav ส่วนหัวของฉันหรือไม่ ควรIE "<a href="support.php">support</a>" be <a href="support">support</a>?

  1. ฉันต้องการมันจะบังคับให้ "www" ก่อนที่ทุก URL ดังนั้นจึงไม่ได้แต่domain.comwww.domain.com/page
  2. ฉันต้องการลบเครื่องหมายทับทั้งหมดออกจากหน้า

ฉันจะดูต่อไปพยายาม ฯลฯ การอยู่ในไดเรกทอรีย่อยจะทำให้เกิดปัญหาหรือไม่?



ฉันแค่อยากรู้ว่านี่คือประโยชน์อะไร? นี่เป็นการทำให้ผู้ใช้ของคุณไม่ทราบว่ากำลังเข้าถึงไฟล์ใดในเซิร์ฟเวอร์ของคุณ?
Kolob Canyon

สองเท่า ดังนั้นพวกเขาจึงไม่รู้ว่าเรากำลังให้บริการไฟล์ประเภทใดและมันดูสะอาดกว่า IMO
Dirty Bird Design

คำถามอื่นที่เกี่ยวข้อง: stackoverflow.com/questions/6534904/… .
เอ็ดเวิร์ด

คำตอบ:


123

คำตอบของ Gumbo ในคำถาม Stack Overflow วิธีซ่อนส่วนขยาย. html ด้วย Apache mod_rewriteควรทำงานได้ดี

Re 1) เปลี่ยน. html เป็น. php

Re a.) ใช่เป็นไปได้เพียงแค่เพิ่ม#tabURL

Re b.) สามารถทำได้โดยใช้QSA(Query String Append) ดูด้านล่าง

สิ่งนี้ควรทำงานในพา ธ ไดเร็กทอรีย่อย:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

ขอบคุณสำหรับความช่วยเหลือของคุณไม่ว่าจะด้วยเหตุผลใดก็ตาม Id bet เนื่องจากเซสชันต่อท้าย url ถูกเข้ารหัสในไฟล์ PHP (เรื่องยาว) ฉันสามารถเข้าถึงได้โดยไม่ต้องข้างต้น ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณสิ่งนี้เป็นเรื่องที่ยุ่งยากสำหรับฉัน
Dirty Bird Design

8
@Pekka 웃ลบช่องว่างระหว่างแฟล็ก[L,ช่องว่างQSA]มิฉะนั้น500 Internal Server Errorจะทำให้เกิด
Rahil Wazir

สิ่งนี้จะทำให้/index/bla/blaเหมือนกับindex.php
elkebirmed

ด้วยเหตุผลบางประการสิ่งนี้บล็อก CSS ของฉันเพื่อโหลด: /
TheCrazyProfessor

! หมายความว่าไม่ กฎนั้นบอกว่าให้เขียนซ้ำเพื่อเพิ่ม. php หากยังไม่ได้ลงท้ายด้วย. php
user339568

71

Apache mod_rewrite

สิ่งที่คุณกำลังมองหาmod_rewrite ,

คำอธิบาย: จัดเตรียมเอ็นจิ้นการเขียนใหม่ตามกฎเพื่อเขียน URL ที่ร้องขอใหม่ได้ทันที

โดยทั่วไปจะmod_rewriteทำงานโดยจับคู่เอกสารที่ร้องขอกับนิพจน์ทั่วไปที่ระบุจากนั้นดำเนินการเขียน URL ใหม่ภายใน (ภายในกระบวนการ apache) หรือภายนอก (ในเบราว์เซอร์ไคลเอนต์) การเขียนซ้ำเหล่านี้ทำได้ง่ายเพียงแค่แปล example.com/foo ภายในเป็นคำขอสำหรับ example.com/foo/bar

เอกสาร Apache มีmod_rewriteคำแนะนำและฉันคิดว่าบางสิ่งที่คุณต้องการทำนั้นครอบคลุมอยู่ในนั้น รายละเอียดคู่มือ mod_rewrite

บังคับwwwโดเมนย่อย

ฉันต้องการให้บังคับ "www" ก่อนทุก url ดังนั้นจึงไม่ใช่ domain.com แต่เป็น www.domain.com/page

คู่มือการเขียนซ้ำมีคำแนะนำสำหรับสิ่งนี้ภายใต้ตัวอย่างCanonical Hostname

ลบเครื่องหมายทับ (ตอนที่ 1)

ฉันต้องการลบเครื่องหมายทับทั้งหมดออกจากหน้า

ฉันไม่แน่ใจว่าทำไมคุณถึงต้องการทำสิ่งนี้เนื่องจากคำแนะนำการเขียนซ้ำมีตัวอย่างสำหรับสิ่งที่ตรงกันข้ามกันกล่าวคือรวมถึงเครื่องหมายทับด้วยเสมอ เอกสารแนะนำว่าการลบเครื่องหมายทับมีโอกาสที่ดีในการทำให้เกิดปัญหา:

ปัญหาเครื่องหมายทับ

คำอธิบาย:

ผู้ดูแลเว็บทุกคนสามารถร้องเพลงเกี่ยวกับปัญหาของเครื่องหมายทับบน URL ที่อ้างถึงไดเรกทอรี หากสิ่งเหล่านี้หายไปเซิร์ฟเวอร์จะทิ้งข้อผิดพลาดเพราะถ้าคุณพูด/~quux/fooแทน/~quux/foo/ เซิร์ฟเวอร์จะค้นหาไฟล์ชื่อ foo และเนื่องจากไฟล์นี้เป็นไดเร็กทอรีจึงบ่น อันที่จริงมันพยายามแก้ไขตัวเองในเกือบทุกกรณี แต่บางครั้งคุณต้องเลียนแบบกลไกนี้ ตัวอย่างเช่นหลังจากที่คุณทำการ rewritings URL ที่ซับซ้อนเป็นจำนวนมากไปยังสคริปต์ CGI เป็นต้น

บางทีคุณอาจขยายความว่าทำไมคุณถึงต้องการลบเครื่องหมายทับตลอดเวลา?

ลบ.phpส่วนขยาย

ฉันต้องการมันเพื่อลบ. php

สิ่งที่ใกล้เคียงที่สุดในการทำสิ่งนี้ที่ฉันคิดได้คือการเขียนเอกสารคำขอทุกรายการภายในด้วยนามสกุล. php กล่าวคือ example.com/somepage จะถูกประมวลผลเป็นคำขอสำหรับ example.com/somepage.php แทน โปรดทราบว่าการดำเนินการในลักษณะนี้จะต้องให้แต่ละเพจมีอยู่จริงเป็น somepage.php บนระบบไฟล์

ด้วยการผสมผสานนิพจน์ทั่วไปที่เหมาะสมสิ่งนี้ควรเป็นไปได้ในระดับหนึ่ง อย่างไรก็ตามฉันสามารถมองเห็นปัญหาที่เป็นไปได้บางประการเกี่ยวกับหน้าดัชนีที่ไม่ได้รับการร้องขออย่างถูกต้องและไม่ตรงกับไดเรกทอรีอย่างถูกต้อง

ตัวอย่างเช่นจะเขียน example.com/test ใหม่อย่างถูกต้องเป็นคำขอสำหรับ example.com/test.php:

RewriteEngine  on
RewriteRule ^(.*)$ $1.php

แต่จะทำให้การโหลด example.com ล้มเหลวเนื่องจากไม่มี example.com/.php

ฉันจะเดาว่าถ้าคุณลบสแลชต่อท้ายทั้งหมดการเลือกคำขอดัชนีไดเร็กทอรีจากคำขอชื่อไฟล์ในไดเร็กทอรีหลักแทบจะเป็นไปไม่ได้เลย คุณกำหนดคำขอสำหรับไดเร็กทอรี 'foobar' ได้อย่างไร:

example.com/foobar

จากการร้องขอไฟล์ชื่อ foobar (ซึ่งจริงๆแล้วคือ foobar.php)

example.com/foobar

อาจเป็นไปได้ถ้าคุณใช้RewriteBaseคำสั่ง แต่ถ้าคุณทำเช่นนั้นปัญหานี้จะซับซ้อนมากขึ้นเนื่องจากคุณจะต้องมีRewriteCondคำสั่งในการตรวจสอบระดับระบบไฟล์ว่าคำขอแมปไปยังไดเร็กทอรีหรือไฟล์หรือไม่

ที่กล่าวว่าหากคุณลบข้อกำหนดของคุณในการลบเครื่องหมายทับทั้งหมดและใช้บังคับเพิ่มเครื่องหมายทับแทนปัญหา "no .php extension" จะดูสมเหตุสมผลกว่าเล็กน้อย

# Turn on the rewrite engine
RewriteEngine  on
# If the request doesn't end in .php (Case insensitive) continue processing rules
RewriteCond %{REQUEST_URI} !\.php$ [NC]
# If the request doesn't end in a slash continue processing the rules
RewriteCond %{REQUEST_URI} [^/]$
# Rewrite the request with a .php extension. L means this is the 'Last' rule
RewriteRule ^(.*)$ $1.php [L]

สิ่งนี้ยังไม่สมบูรณ์แบบ - ทุกคำขอสำหรับไฟล์ยังคงมี. php ต่อท้ายคำขอภายใน คำขอ 'hi.txt' จะใส่สิ่งนี้ไว้ในบันทึกข้อผิดพลาดของคุณ:

[Tue Oct 26 18:12:52 2010] [error] [client 71.61.190.56] script '/var/www/test.peopleareducks.com/rewrite/hi.txt.php' not found or unable to stat

แต่มีตัวเลือกอื่นให้ตั้งค่าDefaultTypeและDirectoryIndexคำสั่งเช่นนี้:

DefaultType application/x-httpd-php
DirectoryIndex index.php index.html

อัปเดต 2013-11-14 - แก้ไขตัวอย่างข้างต้นเพื่อรวมการสังเกตของ nicorellius

ตอนนี้คำขอ hi.txt (และอื่น ๆ ) ประสบความสำเร็จคำขอไปที่ example.com/test จะส่งคืน test.php เวอร์ชันที่ประมวลผลแล้วและไฟล์ index.php จะทำงานอีกครั้ง

ผมต้องให้เครดิตที่เป็นเครดิตเนื่องจากสำหรับการแก้ปัญหานี้เป็นฉันพบว่ามันไมเคิลเจ Radwins บล็อกโดยการค้นหาของ Google สำหรับPHP ไม่มี Apache

ลบเครื่องหมายทับ

การค้นหาบางอย่างapache remove trailing slashesทำให้ฉันไปที่หน้า Search Engine Optimization เห็นได้ชัดว่าระบบการจัดการเนื้อหาบางระบบ (Drupal ในกรณีนี้) จะทำให้เนื้อหาพร้อมใช้งานโดยมีและไม่มีเครื่องหมายทับใน URls ซึ่งในโลก SEO จะทำให้ไซต์ของคุณถูกลงโทษเนื้อหาซ้ำ ที่มา

วิธีแก้ปัญหาดูเหมือนจะไม่สำคัญโดยใช้mod_rewriteเราเขียนใหม่ตามเงื่อนไขที่ทรัพยากรที่ร้องขอจะสิ้นสุดใน a /และเขียน URL ใหม่โดยส่ง301 Permanent Redirectส่วนหัว HTTP กลับ

นี่คือตัวอย่างของเขาซึ่งถือว่าโดเมนของคุณคือ blamcast.net www.และช่วยให้การร้องขอไปยังเลือกที่จะนำหน้าด้วย

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?blamcast\.net$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

ตอนนี้เรากำลังจะไปที่ไหนสักแห่ง มารวบรวมทั้งหมดและดูว่ามันเป็นอย่างไร

บังคับwww.ไม่มี.phpและไม่มีเครื่องหมายทับ

ซึ่งถือว่าโดเมนคือ foobar.com และทำงานบนพอร์ตมาตรฐาน 80

# Process all files as PHP by default
DefaultType application/x-httpd-php
# Fix sub-directory requests by allowing 'index' as a DirectoryIndex value
DirectoryIndex index index.html

# Force the domain to load with the www subdomain prefix
# If the request doesn't start with www...
RewriteCond %{HTTP_HOST}   !^www\.foobar\.com [NC]
# And the site name isn't empty
RewriteCond %{HTTP_HOST}   !^$
# Finally rewrite the request: end of rules, don't escape the output, and force a 301 redirect
RewriteRule ^/?(.*)         http://www.foobar.com/$1 [L,R,NE]

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?foobar\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

แฟล็ก 'R' อธิบายไว้ในRewriteRuleส่วนคำสั่ง ตัวอย่างข้อมูล:

redirect|R [=code](บังคับให้เปลี่ยนเส้นทาง) การแทนที่คำนำหน้าด้วย http://thishost[:thisport]/(ซึ่งทำให้ URL ใหม่เป็น URI) เพื่อบังคับให้มีการเปลี่ยนเส้นทางภายนอก หากไม่มีการระบุรหัสการตอบกลับ HTTP 302 ( MOVED TEMPORARILY ) จะถูกส่งกลับ

หมายเหตุสุดท้าย

ฉันไม่สามารถลบสแลชให้ทำงานได้สำเร็จ การเปลี่ยนเส้นทางสิ้นสุดลงด้วยการวนรอบการเปลี่ยนเส้นทางที่ไม่มีที่สิ้นสุด หลังจากอ่านโซลูชันดั้งเดิมอย่างใกล้ชิดฉันรู้สึกว่าตัวอย่างข้างต้นใช้ได้ผลสำหรับพวกเขาเนื่องจากวิธีกำหนดค่าการติดตั้ง Drupal เขากล่าวถึงโดยเฉพาะ:

ในไซต์ Drupal ปกติที่เปิดใช้งาน URL ที่สะอาดที่อยู่ทั้งสองนี้สามารถใช้แทนกันได้

ในการอ้างอิงถึง URL ที่ลงท้ายด้วยและไม่มีเครื่องหมายทับ นอกจากนี้

Drupal ใช้ไฟล์ที่เรียก.htaccessเพื่อบอกให้เว็บเซิร์ฟเวอร์ของคุณทราบถึงวิธีจัดการ URL นี่คือไฟล์เดียวกับที่เปิดใช้งานเมจิก URL ที่สะอาดของ Drupal ด้วยการเพิ่มคำสั่งเปลี่ยนเส้นทางแบบง่ายที่จุดเริ่มต้นของ .htaccessไฟล์คุณสามารถบังคับให้เซิร์ฟเวอร์ลบเครื่องหมายทับโดยอัตโนมัติ


ว้าวขอบคุณสำหรับทุกสิ่ง จริงๆแล้วฉันสามารถทำให้มันใช้งานได้ปรากฎว่ามีบางสิ่งแปลก ๆ บนเซิร์ฟเวอร์ของฉันที่ฉันต้องเปลี่ยน อย่างไรก็ตามตอนนี้เข้าสู่ปัญหาถัดไปโดยลบ. php ออกจากทุกหน้ายกเว้นหนึ่งหน้า ขอบคุณมนุษย์
Dirty Bird Design

ฉันชอบที่จะเห็นคำตอบที่ไตร่ตรองไว้เป็นอย่างดี ทำได้ดีมาก ... สิ่งหนึ่งที่ฉันสังเกตเห็น: คุณหมายถึงDirectoryIndex index index.html? หรือDirectoryIndex index.php index.html?
nicorellius

@nicorellius เชื่อว่าคุณถูกต้อง ฉันได้อัปเดตคำตอบเดิมของฉันพร้อมข้อสังเกตของคุณ
Tim Bielawa

ฉันต้องบอกว่าสิ่งนี้ไม่ได้ผลเสมอไป ลองคำตอบด้านล่าง (ของผู้ใช้ 1079877)
DonJoe

คุณคือ MVP ตัวจริง
ZainZaheer06

49

นอกเหนือจากคำตอบอื่น ๆ ข้างต้นแล้ว

คุณอาจลองวิธีนี้เพื่อลบนามสกุล. php ออกจากไฟล์ของคุณอย่างสมบูรณ์และเพื่อหลีกเลี่ยงการวนซ้ำที่ไม่สิ้นสุด :

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

รหัสนี้จะใช้งานได้ใน Root / .htaccess โปรดเปลี่ยน RewriteBase หากคุณต้องการวางสิ่งนี้ลงในไฟล์ htaccess ในไดเรกทอรีย่อย

แก้ไข:

ใน apache 2.4 ขึ้นไปคุณยังสามารถใช้แฟล็ก END เพื่อป้องกันข้อผิดพลาดแบบวนซ้ำไม่สิ้นสุด ตัวอย่างต่อไปนี้ใช้งานได้เหมือนกับข้างบนใน apache 2.4

RewriteEngine on

RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]

11
สวัสดีขอบคุณสำหรับสิ่งนี้ ฉันได้ลองวิธีแก้ปัญหามากมายเพื่อตัด. php แต่วิธีนี้ใช้ได้ผลจริง :)
beamkiller

4
ขอบคุณ! การแก้ไขนี้อยู่ที่, apache 2.4, apache 2.5 จบลงในลูปที่ไม่มีที่สิ้นสุด (และจะ 500) [END] super important
Jake Bolam

23

รหัสต่อไปนี้ใช้ได้ดีสำหรับฉัน:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

สิ่งนี้ใช้ได้ยกเว้น example.com จะเปลี่ยนเป็นดัชนีของไฟล์และไดเรกทอรีทั้งหมด (Apache 2.4)
earth2jason


10

หลังจากเปลี่ยนพารามิเตอร์AllowOverrideจากNoneเป็นAllใน/etc/apache2/apache2.conf(Debian 8) ตามนี้ไฟล์. htaccess จะต้องมี:

Options +MultiViews
AddHandler php5-script php
AddType text/html php

และมันก็เพียงพอที่จะซ่อนนามสกุล. php จากไฟล์


หวังว่าอันนี้จะสูงขึ้น ทำไมต้องกังวลกับค่าใช้จ่ายในการเขียน URL ใหม่เมื่อMultiViewsไม่อยู่ในกรอบ
Phil

นี่มันเยี่ยมมาก ข้อบกพร่องใด ๆ ?
ปฏิรูป

@reformed ขอบคุณ ฉันต้องเปลี่ยนลิงค์จาก<a href="somepage.php">ลิงค์</a>เป็น<a href="somepage">ลิงค์</a>ในซอร์สโค้ด
Rodney Salcedo

9

ลองใช้
รหัสต่อไปนี้จะได้ผลแน่นอน

RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

6

ไม่แน่ใจว่าทำไมคำตอบอื่น ๆ ถึงใช้ไม่ได้สำหรับฉัน แต่ฉันพบรหัสนี้:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

นั่นคือทั้งหมดที่อยู่ใน htaccess ของฉันและ example.com/page แสดง example.com/page.php


ขอบคุณที่ทำงานให้ฉัน
Shoyeb Sheikh

5

ฉันได้รหัสการทำงานต่อไปนี้:

RewriteEngine on 
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

มันได้ผลสำหรับฉันขอบคุณ
Chamath Viranga

4

ในการลบนามสกุล. php จากไฟล์ PHP ตัวอย่างเช่น yoursite.com/about.php ไปที่ yoursite.com/about ให้ทำตามขั้นตอนต่อไปนี้ เปิดไฟล์. htaccess (สร้างใหม่ถ้าไม่มี) จากรูทของเว็บไซต์ของคุณและเพิ่มรหัสต่อไปนี้

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

ในการลบนามสกุล. html จากไฟล์ html ตัวอย่างเช่น yoursite.com/about.html ไปที่ yoursite.com/about ให้ทำตามขั้นตอนเหล่านี้

เปิดไฟล์. htaccess (สร้างใหม่ถ้าไม่มี) จากรูทของเว็บไซต์ของคุณและเพิ่มรหัสต่อไปนี้

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

อ้างอิง: วิธีการลบ php Extention จาก URL


3

ฉันพบแนวคิดที่ใช้งานได้ 100% สำหรับฉัน:

# Options is required by Many Hosting
Options +MultiViews

RewriteEngine on

# For .php & .html URL's:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]

ใช้รหัสนี้ในรูทของไฟล์. htaccess ของเว็บไซต์ของคุณเช่น:

ออฟไลน์ - wamp \ www \ YourWebDir

ออนไลน์ - public_html /

หากทำงานไม่ถูกต้องให้เปลี่ยนการตั้งค่าของ Wamp Server ของคุณ: 1) คลิกซ้ายที่ไอคอน WAMP 2) Apache 3) Apache Modules 4) คลิกซ้าย rewrite_module


คุณไม่สามารถมีสองRewriteRules ที่มีแท็กLติดกัน [L]บอกว่ามันเป็นกฎสุดท้ายสำหรับที่ระบุไว้mod_rewrite RewriteCond
MD XF

2

หากคุณกำลังเขียนโค้ดใน PHP และต้องการลบ. php เพื่อให้คุณมี URL เช่น:

http://yourdomain.com/blah -> ซึ่งชี้ไปที่ /blah.php

นี่คือทั้งหมดที่คุณต้องการ:

<IfModule mod_rewrite.c>
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

2

นี่คือรหัสที่ฉันใช้ซ่อน.phpนามสกุลจากชื่อไฟล์:

## hide .php extension
# To redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L,NC]

หมายเหตุ: ใช้R=301สำหรับการเปลี่ยนเส้นทางแบบถาวรและขอแนะนำให้ใช้เพื่อวัตถุประสงค์ด้าน SEO อย่างไรก็ตามหากใครต้องการเพียงแค่การเปลี่ยนเส้นทางชั่วคราวให้แทนที่ด้วย justR


1

หาก url ของคุณใน PHP เช่นhttp://yourdomain.com/demo.phpมาเช่น http://yourdomain.com/demo

นี่คือทั้งหมดที่คุณต้องการ:

สร้างไฟล์. htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

มันใช้งานได้http://example.com/myfile แต่ใช้ไม่ได้กับhttp://example.com/myfolder/(ไฟล์ดัชนี) คุณช่วยฉันทำให้มันทำงานกับไฟล์ดัชนีได้ไหม
Wesley Gonçalves

ฉันคิดว่าคุณควรลองด้านบน @starkeen answer URL: stackoverflow.com/a/30566026/3786343
Kamlesh

1

ลอง

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L] 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.