我需要检查请求的网址,并根据请求是针对文件还是目录提供不同的选项。
我的网址如下:
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搜索没有出现任何有效的内容。
答案 0 :(得分: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]
答案 1 :(得分:0)
到目前为止,最简单的如果启用mod协商(通常是):
Options MultiViews
MultiviewsMatch Any
DirectoryIndex index.php
不会强制.php,如果你有somefile.html和somefile.php,通常会选择.html文件。