在子目录中重写规则

时间:2015-03-10 17:47:13

标签: php apache .htaccess mod-rewrite url-rewriting

重写规则在子目录中的远程主机上不起作用。

在生产阶段,我有这个目录http://localhost/prj/。我用RewriteRule来"隐藏"和#34;加载"没有扩展名的PHP文件。这是我用过的.htaccess
Options +FollowSymLinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php

所以,这很好,我已经开发了这个项目,我想将它上传到我的VPS以供远程使用等。问题是,该项目仍处于测试阶段,我不会将其保留在根目录ATM中,但是在子目录/ beta /中,所以现在,我的URL现在是这样的:http://example.com/beta/

然而,当我尝试访问该URL时,index.php会自动加载,但当我访问例如文件play.php为http://example.com/beta/play时,它无法正常工作,但是当项目是在生产中。

这就是我的尝试:

  • 将RewriteBase用于/ beta /
    RewriteBase /beta/
  • 使用不同的选项
    Options All -Indexes -MultiViews
  • 在实际RewriteRule之前使用目录 RewriteRule ^/beta/(.*)$ $1.php
  • 使用操作员[L, QSA]

示例:

Options All -Indexes -MultiViews
RewriteEngine on
RewriteBase /beta/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L,QSA]  



Options All -Indexes -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^/beta/(.*)$ $1.php [L,QSA]

返回错误是404未找到。
编辑:我本来应该在apache2.conf里面吗?

1 个答案:

答案 0 :(得分:1)

/beta/.htaccess

中试试
Options All -Indexes -MultiViews
RewriteEngine on
RewriteBase /beta/

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