Apache没有运行我的PHP索引脚本

时间:2012-06-12 14:37:40

标签: php apache .htaccess mod-rewrite

如果我决定将其放在我的文件中:

IndexIgnore */*
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page_request=$1 [QSA,L]

网站运行正常。然后我决定mv index.php subdir/index.php,所以我将最后一行更改为以下内容:

RewriteRule ^(.*)$ /subdir/index.php?page_request=$1 [QSA,L]

我所看到的只是一个Apache目录列表。我究竟做错了什么?这可能是一个非常简单的解决方案,但我的资源没有发现任何东西。

困扰我的是工作。认为所需要的只是更改index.php

的文件位置是直观和自然的

修改

我尝试了RewriteBaseRewriteCond %{REQUEST_URI} !/subdir/index.php。两者都没有效果。

5 个答案:

答案 0 :(得分:2)

您是否尝试过启用重写日志记录?尝试将此添加到您的vhost:

RewriteLogLevel 3
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

您发布的规则对我来说似乎很合适......

修改

好的,我能够在我的Mac上复制这个问题,并发现这就是你需要的:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

问题是,当您转到http://localhost/ %{REQUEST_FILENAME}时没有值。可能有一种方法可以将这些规则合并为一个,但我还没想出来。

编辑2:

我刚试过这个,它也有效:

DirectoryIndex subdir/index.php

RewriteEngine On   
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

但是,它没有任何关于page_request $_GET变量值的内容,因此您必须在代码中处理该情况。

这是有效的,因为你告诉Apache查看索引页的子目录而不是当前目录。

答案 1 :(得分:0)

尝试删除斜杠..

RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

答案 2 :(得分:0)

RewriteRule ^(。*)$。/ subdir / index.php?page_request = $ 1 [QSA,L]

答案 3 :(得分:0)

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/subdir/index.php 
RewriteRule (.*) /subdir/index.php?page_request=$1 [QSA,L]

答案 4 :(得分:-1)

使用此:

 RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]