我想重写:
http://mydomain
至./main.php
http://mydomain/abc
至./main.php/abc
http://mydomain/abc?def=xyz
至./main.php/abc?def=xyz
http://mydomain/admin
至./admin.php
http://mydomain/admin/abc
至./admin.php/abc
这是我当前的.htaccess文件:
Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^$ ./main.php [QSA,L]
RewriteRule ^/$ ./main.php [QSA,L]
RewriteRule ^admin$ ./admin.php [NC,L]
RewriteRule ^admin/$ ./admin.php [NC,L]
RewriteRule ^admin/([a-zA-Z0-9-_]+)$ ./admin.php/$1 [NC,L]
RewriteRule ^([a-zA-Z0-9-_]+)$ ./main.php/$1 [NC,L]
但我在访问http://mydomain
时不断出现403 Forbidden错误,我错过了什么?
您可以在.htaccess:中使用此代码
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l [OR]
# don't do anything
RewriteRule ^ - [L]
RewriteRule ^admin/?(.*)$ admin.php/$1 [NC,L]
RewriteRule ^(.*)$ main.php/$1 [L]
为什么要将"admin"重定向到"./admin.php"?如果我是对的,这个重定向会导致一个URL,比如:http://domain.com/./admin.php-这是正确的吗?
此外,我不确定,因为"admin"是您在上次重写规则中使用的"^([a-zA-Z0-9-_]+)$"的一部分,因此"admin"也会重定向到"./main.php"。
您可能希望启用重写日志来更深入地了解重写模块正在做什么:
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite_log"
RewriteLogLevel 5
查看/var/log/apache/error.log或access.log也可能有助于找出重写的URL。