我刚开始学习Apache的.htaccess文件,我设置了一个网站,以便所有请求都来自我的索引文件(名为Main.php)。
然后通过wp GET var(例如wp = forum)获取“网页” - 我希望改为Domain/directory/Forum
而不是当前Doman/directory/Main.php?wp=Forum
我面临的问题是我的所有“网页”都存储在他们自己的目录中,并由“webparts”组成,因此论坛将成为“论坛”的子目录,其中包含构成页面的文件。这导致我的重定向问题。
我创建了以下.htacess文件:
#turn redirect engine on
RewriteEngine On
#make sure URI is not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^?]*)$ Main.php?wp=$1 [NC,L,QSA]
这在重定向时工作正常,直到它是一个输入为“wp”的目录,此时它将添加一个尾部斜杠并破坏传递的wp GET var(论坛/将根据需要传递给论坛)< / p>
以下是我认为它可能有效的两个例子:
主要(不是文件或目录)
MainContent(是一个目录)
此外,无论何时在我的websever中使用尾随斜杠访问文件(例如:Main.php /),它都将显示没有链接或包含的文件。它只显示被请求的文件,似乎忽略任何和所有css ... php包含或其他任何东西(这是默认的Apache设置?)。
很抱歉这篇漫长且可能令人困惑的帖子。如果我需要清理任何东西,只需要大喊。
答案 0 :(得分:2)
尝试:
#turn redirect engine on
RewriteEngine On
DirectorySlash Off
#make sure URI is not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ Main.php?wp=$1 [NC,L,QSA]
答案 1 :(得分:0)
查看Drupal的.htaccess文件可能会有所帮助,它可以执行相同的操作 - 即通过索引文件重定向所有请求。该文件中最相关的代码段是:
# Pass all requests not referring directly to files in the filesystem to index.php?page=[rest of url]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
上面的第二个条件&#34;! -d&#34;可能会解决您描述的问题,但您可能仍需要做一些&#34;清洁&#34;在你的PHP代码中。值得查看整个Drupal .htaccess文件,因为它可以加强安全性,例如阻止访问某些文件等。