将`admin`重写为`admin.php`,将其他所有内容重写为`main.php`

时间:2012-03-29 13:19:56

标签: .htaccess mod-rewrite

我想改写:

  • 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 错误,我错过了什么?

2 个答案:

答案 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也可能有所帮助。