我正在尝试配置.htaccess文件以将所有网址重新路由到最近的索引子目录,如下所示:
http://example.com/admin/blah/test/whatever应留在地址栏中,但请指向:
如果url是实际文件的url,则应始终转到该文件。所以http://example.com/admin/blah/file.css或http://example.com/admin/blah/item.inc如果存在则仍然可以正常工作,否则它应该重定向到该文件夹中的index.php,或者如上所示的最近的父文件夹。
我也希望这只会影响子文件夹,如果可能的话。在上面的例子中,我假设.htaccess文件将放在/ admin /文件夹中。
更新 以下是目前的工作原理:
# No Directory Listings or trailing slashes
Options -Multiviews -Indexes +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# See if the current request is a directory containing an index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)/?$ $1/index.php [L,QSA]
# if index.php doesn't exist in current dir then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1$2/index.php !-f
RewriteRule ^(.*?/)?([^/]+)/?$ $1 [L,QSA]
</IfModule>
这大部分都有效。如果我输入http://example.com/admin?p=2,它会按预期结算,但如果我使用URL http://example.com/admin/?p=2它也会解析,而不会明确删除尾部斜杠。
答案 0 :(得分:1)
这是一个相当棘手的规则。请在您的DOCUMENT_ROOT/.htaccess
文件中尝试此操作:
RewriteEngine On
RewriteBase /
# if index.php doesn't exist in current dir then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1$2/index.php !-f
RewriteRule ^(.*?/)?([^/]+)/?$ $1 [L]
答案 1 :(得分:0)
这是最终起作用的。
在我的.htaccess文件中,我有:
# No Directory Listings
Options -Multiviews -Indexes +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# see if the current directory contains an index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)/?$ $1/index.php [L,QSA]
# if index.php doesn't exist in current dir then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1$2/index.php !-f
RewriteRule ^(.*?/)?([^/]+)/?$ $1 [L,QSA]
</IfModule>
现有目录的链接在该目录中查找index.php。指向现有文件的链接显示该文件。其他所有内容都重定向到我的index.php。从那里,我可以正常阅读$ _GET的任何查询,我可以阅读并解析完整的URL以查看要显示的页面。如果我不希望它应用于整个站点,这也适用于子目录。