0

在 hostagator 中,我必须使用一些预定义的 htaccess 规则,如下所示为域设置我的主目录。

#Change example.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?example.com$*

#Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/subdir/*

#Don't change these line.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d*

#Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /subdir/$1*

现在的问题是,当我在浏览器中输入时:example.com/some_dir(不带斜杠)它会显示像 example.com/subdir/some_dir/ 这样的网址,我喜欢 example.com/some_dir/*

但我不能更改任何上述预定义规则,否则它会破坏我的网站,因为它必须具有我的目录结构。所以添加斜杠规则也不起作用。

我的目录结构是这样的:

/

/subdir/.htaccess

/subdir/index.php

/subdir/some_dir

/subdir/some_other_dir

ETC


或任何其他方式将 example.com/some_dir 完全重定向到 example.com/some_dir/ 以获取新请求,以便在新请求之后遵循上述规则。?


部分解决:

我在 stackoverflow 的某个地方找到了添加尾随反斜杠的地方: RewriteRule ^(([a-z0-9-]+/)*[a-z0-9-]+)$ $1/

所以只是通过使用它,我尝试制定这样的规则,并放在我上面的预定义规则之前:

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(.*)/$
RewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/

现在它可以在没有斜杠的情况下工作 例如 example.com/some_dir ,不会重定向到 example.com/subdir/some_dir/ 而是只停留在 example.com/some_dir (没有斜杠)..

谁能解释这个正则表达式 (([a-z0-9-]+/)*[a-z0-9-]+) 是什么意思?它是如何工作的?

现在 example.com/some_dir/dir1 与我的主要问题有同样的问题,我该如何修改上述规则?

4

0 回答 0