คำถามติดแท็ก mod-rewrite

โมดูลการเขียน URL ใหม่สำหรับ Apache เว็บเซิร์ฟเวอร์

2
การเปลี่ยนเส้นทาง SSL โดยไม่แจ้งเตือน
ลูกค้ามีใบรับรอง SSL สำหรับโดเมน www.site.com เท่านั้นไม่ใช่ site.com การเปลี่ยนเส้นทางสำหรับ HTTP ปกติไม่ใช่ปัญหาผ่าน mod_rewrite อย่างไรก็ตามวิธีนี้ดูเหมือนจะล้มเหลวสำหรับเราสำหรับ HTTPS เราต้องการที่จะเปลี่ยนเส้นทางhttps://site.comร้องขอhttps://www.site.com สามารถทำได้โดยไม่แจ้งเตือนใบรับรองที่ไม่ถูกต้องในเบราว์เซอร์หรือรับใบรับรองตัวแทน?

4
ทำไมการเปลี่ยนเส้นทาง. htaccess จึงทำงานใน http แต่ไม่ใช่กับ https
ฉันมีไฟล์. htaccess ที่ใช้งานได้ดีบนเว็บไซต์ http รุ่น แต่ไม่ใช่เมื่อฉันไปที่ https ทำไม? RewriteEngine on #This is so if the file exists then use the file RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ %{REQUEST_FILENAME} [L] #These conditions check if a file or folder exists just for reference #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d #if someone adds ".php" …

3
Apache: จะตรวจสอบบันทึกการเปลี่ยนเส้นทางได้ที่ไหน
ฉันมีความซับซ้อนRewriteCondและRewriteRuleในเครื่องเดียว และตามกฎเหล่านี้คำขอบางส่วนจะถูกเปลี่ยนเส้นทางไปยังเครื่องอื่น ดังนั้นจะมีบันทึก Apache ที่แสดงให้เห็นชัดเจนว่าเกิดการเปลี่ยนเส้นทางอย่างไร? เพราะการเปลี่ยนเส้นทางเกิดขึ้นในแบบที่ฉันไม่คาดคิด

2
ไม่สามารถหากฎ htaccess
ฉันมีสิ่งนี้ใน htaccess ของฉัน แต่ไม่สามารถหาได้ว่ามันมีไว้เพื่ออะไร เนื่องจากลักษณะของกฎการค้นหาจึงไม่ได้ช่วยอะไรเช่นกัน RewriteCond %{REQUEST_URI} !(/$|\.) RewriteRule (.*) %{REQUEST_URI}/ [R=301] ใครช่วยอธิบายหน่อยได้ไหม?

1
HSTS และ double redirect
ฉันจัดการเว็บไซต์เล็ก ๆ น้อย ๆ ในสภาพแวดล้อม LAMP ของโฮสติ้งที่ใช้ร่วมกัน: สิ่งนี้โดยทั่วไปหมายถึงสิ่งเดียวที่ฉันสามารถแก้ไขได้คือไฟล์ htaccess ฉันต้องการเพิ่มการสนับสนุน HSTS (และฉันทำได้) แต่เมื่อฉันทดสอบเว็บไซต์ของฉันที่นี่เพื่อรับสิทธิ์โหลดล่วงหน้า HSTS ฉันได้รับข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด: HTTP เปลี่ยนเส้นทางไปที่ www ก่อน http://example(HTTP) ควรเปลี่ยนเส้นทางไปที่https://example(HTTPS) ทันทีก่อนที่จะเพิ่มโดเมนย่อย www ในตอนนี้การเปลี่ยนเส้นทางครั้งแรกคือhttps://www.example.การเปลี่ยนเส้นทางเพิ่มเติมเป็นสิ่งจำเป็นเพื่อให้แน่ใจว่าเบราว์เซอร์ที่รองรับ HSTS จะบันทึกรายการ HSTS สำหรับโดเมนระดับบนสุดไม่ใช่เฉพาะโดเมนย่อย ดังนั้นฉันคิดว่าฉันควรเปลี่ยนเส้นทางผู้ใช้ด้วยวิธีนี้: http://example (นี่คือสิ่งที่ผู้ใช้ป้อนในแถบที่อยู่ของเบราว์เซอร์) https://example (เราเปลี่ยนเส้นทางเขาไปยังเว็บไซต์รุ่น HTTPS) https://www.example (เราเปลี่ยนเส้นทางเขาอีกครั้งเพื่อ www โดเมนย่อย) การเปลี่ยนเส้นทางปัจจุบันของฉันทำได้ดังนี้: RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] ฉันพยายามเพิ่มการเปลี่ยนเส้นทางก่อนบรรทัดสุดท้ายด้วยวิธีนี้: RewriteRule ^(.*)$ …

2
เหตุใดการเปิดใช้งานบันทึกการเขียนซ้ำใน. htaccess จึงไม่ทำงาน
ฉันต้องการเปิดใช้งานการบันทึกซ้ำเพื่อให้ฉันสามารถดีบักกฎการเขียนซ้ำ แต่การเพิ่มคำสั่ง RewriteLog ทำให้เกิดข้อผิดพลาด 500 ข้อมูลรุ่น: Ubuntu 14.04 Server version: Apache/2.4.12 (Ubuntu) Server built: Feb 4 2015 14:22:06 เนื้อหาของ .htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteLog /var/log/apache2/rewrite.log RewriteLogLevel 5 RewriteBase / RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> ในบันทึกข้อผิดพลาดฉันเห็น: …

1
การตั้งค่า SSL พร้อม apache หน้า Tomcat
ฉันกำลังพยายามตั้งค่า Apache ด้วย SSl และการร้องขอ SSL กับพร็อกซี Tomcat ของฉัน ฉันคิดว่าฉันทำงาน SSL แต่ยังมีข้อผิดพลาดที่ปรากฏขึ้น: Bad Gateway The proxy server received an invalid response from an upstream server. * SSL Virtualhost * LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost _default_:443> SSLEngine On SSLProxyEngine On DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/" SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem BrowserMatch ".*MSIE.*" …

2
บังคับ HTTPS ด้วย mod_rewrite รวมถึงพร็อกซี SSL
ฉันมีเซิร์ฟเวอร์ที่รับปริมาณการใช้งานจาก SSL ที่ยกเลิก load balancer ซึ่งในกรณีนั้นมันจะเป็น HTTP ผ่านพอร์ต 80 ด้วยhttp_x_forwarded_proto= "https" ฉันต้องการกฎ mod_rewrite ที่อนุญาตเฉพาะทราฟฟิก HTTPS โดยตรงหรือทราฟฟิก HTTPS ที่ส่งต่อ ฉันมีสิ่งนี้: RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{HTTP:http_x_forwarded_proto} != https RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] แต่ฉันได้รับ RewriteCond: ตัวคั่นธงไม่ถูกต้อง ความผิดพลาด ฉันต้องแก้ไขอะไรเพื่อให้ได้งานนี้และนี่คือแนวทางที่ดีที่สุด

3
ความแตกต่างระหว่าง“ การเปลี่ยนเส้นทางถาวร” กับ mod_rewrite RewriteRule
นี่คือเซิร์ฟเวอร์ Apache httpd 2.2 เราต้องการให้ HTTPS เข้าถึงเซิร์ฟเวอร์นี้เพื่อเข้ารหัส เมื่อลูกค้าเว็บเยี่ยมชมเว็บไซต์ของฉันที่http://www.example.org/ $ foo (พอร์ต 80) ฉันต้องการเปลี่ยนเส้นทางคำขอไปยังเว็บไซต์ที่เข้ารหัส HTTPS ที่https://www.example.org/ $ foo ดูเหมือนจะมีสองวิธีทั่วไปในการทำเช่นนี้: วิธีแรกใช้คำสั่ง ' เปลี่ยนเส้นทาง ' จาก mod_alias: <VirtualHost *:80> Redirect permanent / https://www.example.org/ </VirtualHost> วิธีที่สองใช้ mod_rewrite: <VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> อะไรคือความแตกต่างระหว่าง "การเปลี่ยนเส้นทางถาวร" และ mod_rewrite stanza เป็นคนหนึ่งที่ดีกว่าคนอื่น …

2
Apache เขียนหลายเงื่อนไข
ฉันมีเว็บไซต์ที่ย้ายจากชื่อโดเมนเก่า (เช่น olddomain.com) ไปยังชื่อโดเมนใหม่ (เช่น newdomain.com) ด้วยเหตุผล SEO ฉันต้องเขียนการเข้าชมเว็บไซต์ทั้งหมดใหม่ให้กับชื่อโดเมนหลักใหม่ (เช่น www.newdomain.com) น่าเสียดายที่ฉันไม่ทราบวิธีการเพิ่มเงื่อนไขการเขียนหรือพิมพ์ซ้ำหลายครั้ง ดูเหมือนว่าด้วยเงื่อนไขทั้งหมดโค้ดตัวอย่างด้านล่างฉันได้รับและเงื่อนไข <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName newdomain.com ServerAlias www.newdomain.com ServerAlias olddomain.com ServerAlias www.olddomain.com DocumentRoot /var/www/newdomain.com/www/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel …

11
. htaccess ไม่เปลี่ยนเส้นทางไปยังหน้า www-prefixed อย่างถูกต้อง
ฉันกำลังพยายามเปลี่ยนเส้นทาง URL ที่ไม่มี www ไปที่ www.version (example.com ถึง www.example.com) ฉันใช้ตามปกติ RewriteCond %{HTTP_HOST} ^example\.com [nc] RewriteRule (.*) http://www.example.com/$1 [R=301,L] สิ่งนี้ใช้ได้กับโครงการอื่น ๆ ของฉันทั้งหมด อย่างไรก็ตามในเว็บไซต์นี้โดยเฉพาะมันจะจบลงด้วยการวนรอบการเปลี่ยนเส้นทาง นี่คือส่วนที่แปลกประหลาด: ฉันพยายามที่จะม้วนเวอร์ชั่นที่ไม่ใช่ www เพื่อดูว่าส่วนหัวของมันส่งให้ใช้ curl --get http://example.com --dump-header domain.header > domain.htmlอะไร ไฟล์ส่วนหัวมีลักษณะดังนี้: HTTP/1.1 301 Moved Permanently Date: Mon, 06 Jun 2011 14:45:16 GMT Server: Apache/2.2.16 (Debian) Location: http://example.com/ …

1
ทำไม RewriteLog ของฉันไม่ทำงาน
ฉันมี. htaccess ซึ่งมีลักษณะเช่นนี้: RewriteEngine on RewriteLog "/Applications/MAMP/logs/rewrite_engine_log" RewriteCond %{REQUEST_URI} !/(index.php|css|images|js)/.*$ RewriteRule (.*) /mysite/index.php/$1 เมื่อฉันเพิ่มคำสั่ง RewriteLog นั้นฉันได้รับข้อผิดพลาดภายในของเซิร์ฟเวอร์ ในล็อกไฟล์ Apache ฉันได้รับข้อมูลนี้: /Applications/MAMP/htdocs/mysite/.htaccess: RewriteLog not allowed here ฉันไม่ได้สร้างไฟล์ rewrite_engine_log นั้นด้วยตนเอง แต่พา ธ / Applications / MAMP / logs / มีอยู่ใน mac ของฉัน ฉันจะลองอะไรต่อไปเพื่อรับไฟล์บันทึกของ RewriteEngine ได้บ้าง

2
ฉันจะทำให้ URL ทั้งหมดทำงานผ่านไฟล์ PHP ไฟล์เดียวได้อย่างไร
ระบบ MVC ที่ URL อยู่ในรูปแบบเหล่านี้บังคับให้คำขอทั้งหมดผ่านไฟล์ index.php ไฟล์เดียวได้อย่างไร http://www.example.com/foo/bar/baz http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object http://www.example.com/hey/you แก้ไข: เมื่อฉันลองกฎการเขียนด้านล่างฉันได้รับข้อผิดพลาดนี้: [error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1 [error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1 แก้ไข: โอ้นี่เป็นเนื้อหาที่สมบูรณ์ของ /index.php เมื่อฉันลบกฎการเขียนซ้ำมันจะส่งออก '/' หรือ '/index.php' หรือฉันได้รับ 404 สำหรับสิ่งอื่นใด <?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> แก้ไขแล้ว: ฉันเพิ่ม a / …

4
เหตุใดฉันจึงได้รับเครื่องหมายทับสองด้านโดยขึ้นอยู่กับว่า RewriteRule ของฉันอยู่ที่ใด
ฉันใช้รหัสต่อไปนี้เพื่อนำคำร้องขอ www ทั้งหมดไปยัง URL ที่ไม่ใช่ www: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC] RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] สิ่งนี้ใช้งานได้ดีในไฟล์. htaccess ในรูทของเว็บไซต์ของฉัน ตัวอย่างเช่น www.example.com -> example.com/ www.example.com/ -> example.com/ www.example.com/other_page -> example.com/other_page อย่างไรก็ตามหากฉันย้ายรหัสเดียวกันนี้ไปยังการกำหนดค่า VirtualHost ของฉัน URL ที่เขียนใหม่จะมีเครื่องหมายทับสองด้าน www.example.com -> example.com// www.example.com/ -> example.com // www.example.com/other_page -> example.com//other_page ฉันแก้ไขได้โดยลบเครื่องหมายทับจากกฎการเขียนซ้ำ: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.org$ …

3
mod_rewrite ไม่ส่งต่อพารามิเตอร์ GET
ฉันมีปัญหาในการตั้งค่า Apache ด้วย mod_rewrite บนเครื่องพัฒนาของฉัน Mod_rewrite ทำงานอยู่และทำงานได้ดีสำหรับกฎบางข้อ กฎบางอย่างไม่ทำงานตามที่ตั้งใจไว้เช่นนี้: RewriteRule ^static/([^/]+)/([^/]+) /static.php?sISOCode=$1&sPage=$2 ใน static.php ฉันทำสิ่งนี้ (สำหรับการดีบัก): <?php print_r($_GET); print_r($_POST); print_r($_SERVER); die(); สิ่งที่พิมพ์ (ลบบางรายการออกจากอาร์เรย์ $ _SERVER): Array ( ) Array ( ) Array ( [SERVER_SIGNATURE] => <address>Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch Server at alpha.prove.no Port 80</address> [SERVER_SOFTWARE] => Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.