如果我决定将其放在我的.htaccess文件中:
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
。
我尝试了RewriteBase
和RewriteCond %{REQUEST_URI} !/subdir/index.php
。两者都没有效果。
答案 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]