【发布时间】:2016-05-12 04:29:48
【问题描述】:
当用户请求目录时(如果文件存在),我正在使用 htaccess 加载文件, 所以如果你去 /login/ 你加载 /login.php 等等等等。
如果请求不是index.php,并且如果“map”(文件)不存在,它应该加载user.php和它后面的map,所以/thomas/应该加载user.php?dir=thomas
这是我想要的,但我似乎无法让它工作,这是目前我的 htaccess,它工作,但登录/注册/注销也附加到 user.php,当我取消注释该行时当(例如)加载索引时,它将导致无限循环。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index\.php [NC]
#RewriteRule ^(login|register|logout)(/|)$ $1.php [L,NC,QSA]
RewriteRule ^([^\?]*)$ user.php?dir=$1 [L,QSA]
提前致谢!
编辑: 我更改了 .htaccess 以检查 php 文件是否存在,如果存在则包含它。但是现在我的文件夹 /settings/ 不再起作用了;(
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L,NC]
# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*?)(/(.*)|)$
RewriteCond %{DOCUMENT_ROOT}$1.php -f
RewriteRule ^(.*?)(/(.*)|)$ $1.php?args=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\?]+)$ user.php?dir=$1 [L,QSA]
我希望像根一样发生同样的事情。例如,我希望它尝试,当我转到 /settings/modules 时,它首先检查 /settings/modules/index.php 是否存在,如果不存在,则检查 /settings/modules.php 是否存在,如果不存在,则检查设置.php 存在,如果存在,包括 settings.php?args=modules 但我不知道这是否可能:\
我希望我的意图很明确 x)
【问题讨论】:
标签: apache .htaccess mod-rewrite