我想改写:
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 错误,我错过了什么?
答案 0 :(得分:1)
您可以在.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]
答案 1 :(得分:0)
为什么要将“admin”重定向到“./admin.php”?如果我是对的,这个重定向会产生如下网址: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也可能有所帮助。