ฉันมีปัญหาในการตั้งค่า 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 Suhosin-Patch
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => /home/veg/workspace/project
[SERVER_ADMIN] => webmaster@localhost
[SCRIPT_FILENAME] => /home/veg/workspace/project/static.php
[REMOTE_PORT] => 38954
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /static/no/startCar
[SCRIPT_NAME] => /static.php
[PATH_INFO] => /no/startCar
[PATH_TRANSLATED] => redirect:/index.php/startCar
[PHP_SELF] => /static.php/no/startCar
[argv] => Array
(
)
[argc] => 0
)
ยังไงก็ตามพารามิเตอร์ GET ที่ตั้งตามกฎไม่ผ่าน มีการใช้ไฟล์. htaccess เดียวกันในการตั้งค่าอื่น ๆ และใช้งานได้ดี การกำหนดค่า Apache สำหรับโดเมนเสมือนนี้:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName project.example.com
DocumentRoot /home/veg/workspace/project
<Directory /home/veg/workspace/project>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
บันทึกการเข้าถึงและบันทึกข้อผิดพลาดจะไม่แสดงผลใด ๆ เมื่อเกิดเหตุการณ์เช่นนี้ ความคิดใด ๆ ชื่นชม
ตัวอย่างของกฎที่ใช้งานได้สำหรับไฟล์เดียวกัน:
RewriteRule ^faq/?$ /static.php?sISOCode=no&sPage=faq