htaccess在服务器中不起作用但在localhost中工作(删除php扩展)

时间:2014-11-19 07:39:00

标签: regex apache .htaccess mod-rewrite

我想知道这段代码有什么问题,因为它上次在服务器和localhost中运行良好。但现在它在服务器上根本不起作用..

以下是我的代码:

RewriteEngine on
RewriteBase /mydomain/

# Return 404 if original request is /mydomain/index.php
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^ - [L,R=404]

# Rewrite /mydomain/index to /mydomain/index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^./]+)/?$ $1.php [L]

我的域名是mydomain.com,localhost文件夹是mydomain。它适用于localhost,但不适用于服务器。发生了什么事?

2 个答案:

答案 0 :(得分:0)

你的.htaccess中有RewriteBase行:

RewriteBase /mydomain/

如果您在实时服务器上没有mydomain文件夹:

RewriteBase /

RewriteBase表示DocumentRoot的.htaccess当前目录的相对路径。

完整.htaccess:

RewriteEngine on
RewriteBase /

# Return 404 if original request is /mydomain/index.php
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^ - [L,R=404]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

答案 1 :(得分:0)

更改httpd.conf文件(linux服务器:/etc/httpd/conf/httpd.conf)

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
    AllowOverride All

如果设置AllowOverride None,则不会反映您在.htaccess文件中所做的更改