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



我想重写:

  • 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。

最新更新