1

我需要检查请求的 URL,并根据请求是针对文件还是目录提供不同的选项。

我的网址看起来像:

  • http://www.example.com/Services/Service-1(目录,服务/pages/Services/Service1/index.php
  • http://www.example.com/Services/Service-1/Feature-1/Sub-Feature(一个实际的文件,服务/pages/Services/Service-1/Feature-1/Sub-Feature.php

由于我对 .htaccess 缺乏了解(这需要 RewriteCondition 吗?),我目前无法枚举目录结构的每个文件夹,如下所示:

RewriteRule ^Services/Service-1/(.*)$ /pages/Services/Service-1/$1.php
RewriteRule ^Services/Service-1 /pages/Services/Service-1/index.php

RewriteRule ^Services/Service-2/(.*)$ /pages/Services/Service-2/$1.php
RewriteRule ^Services/Service-2 /pages/Services/Service-2/index.php

RewriteRule ^Services/(.*)$ /pages/Services/$1.php
RewriteRule ^Services /pages/Services/index.php

RewriteRule ^Testimonials/(.*)$ /pages/Testimonials/$1.php
RewriteRule ^Testimonials /pages/Testimonials/index.php

不用说,这是一个真正的痛苦——每当我添加内容文件夹时,我都必须使用 .htaccess。

我知道一定有更好的方法,但是当我尝试它时,我的 google 和 stackoverflow 搜索没有找到任何有效的方法。

4

2 回答 2

3

你猜对了,可以使用 rewriteCond 来验证请求的 uri 是文件还是目录:

# f for a file, d for a directory
RewriteCond %{REQUEST_FILENAME} -f 

你 .htaccess 将是:

Options -MultiViews
RewriteEngine ON    

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.+) /$1/index.php [QSA,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.+) /$1.php [QSA,L]

编辑:如果您的文件位于页面子目录中,则必须使用以下代码:

Options -MultiViews
RewriteEngine ON    

RewriteCond %{DOCUMENT_ROOT}/pages/$1 -d
RewriteRule (.+) /pages/$1/index.php [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/pages/$1.php -f
RewriteRule (.+) /pages/$1.php [QSA,L]
于 2013-06-20T21:28:23.837 回答
0

到目前为止,如果启用了 mod 协商,则最简单(通常是):

Options MultiViews
MultiviewsMatch Any
DirectoryIndex index.php

但是,如果您有 somefile.html 和 somefile.php,则不会强制使用 .php,通常会选择 .html 文件。

于 2013-06-20T21:36:28.403 回答