微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用RewriteBase将localhost更改为localhost / subdir?

如何解决如何使用RewriteBase将localhost更改为localhost / subdir?

我有一个旧的.htaccess文件,我试图再次使用它,但我不记得我最初是如何工作的。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.PHP

它的位置如下:

/ localhost
  / site
    / subfolder
    / subfolder2
    / subfolder3
    / index.PHP
    / page.PHP
    / .htaccess

我的网站的入口点是localhost/site/index.PHP,其中包含指向其他页面链接。如果我单击一个链接,例如./page,它将带我到localhost/page,而不是localhost/site/page.PHP。请注意,当RewriteBase应该将子目录解释为.PHP时,子目录将被忽略,并且扩展名采用原义。

我尝试将RewriteBase /更改为RewriteBase /site/,但似乎没有任何作用。有什么想法吗?

解决方法

将此代码保存在site/.htaccess中:

DirectoryIndex index.php
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/site/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

在网站根目录.htacess中,您需要输入以下规则:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/site/$1.php -f
RewriteRule ^(.+?)/?$ site/$1.php [L]

PS:最好在页面的HTML <head>

<base href="/site/" />标签下面添加此链接来修复相对链接 ,

说明...

如果我单击一个链接,例如./page,它将带我到localhost/page,而不是localhost/site/page.php

它将在内部将请求重写为/page.php(在文档根目录中),这大概会导致产生404。这是因为RewriteBase /指令-提供URL前缀用于相对路径替换,即$1.php

请注意子目录将被忽略...

由于.htaccess文件位于/site子目录中,因此RewriteRule 模式仅捕获此后的URL路径部分。因此,例如,如果您请求localhost/site/page(来自您的相对 ./page链接的解析URL路径),则RewriteRule 模式捕获page$1后向引用的值),并将其重写为page.phpRewriteBase的前缀将变为/page.php(在文档根目录。)

我尝试将RewriteBase /更改为RewriteBase /site/,但似乎没有任何作用。有什么想法吗?

是的。实际上,这就是您需要要做的所有事情。

或者,最好将RewriteBase指令完全删除(这是@anubhava在其回答中所做的事情),因为.htaccess文件位于同一目录中。在没有RewriteBase指令的情况下,相对路径替换的默认操作是重新添加目录前缀(即/site目录的文件系统路径)。因此,给定/site/page链接的请求(来自./page的请求,它自然会重写为/site/page.php,而不必显式包含/site子目录。

无论哪种方式,更改RewriteBase指令(在这种情况下,必须都已完成)。如果没有,那么您可能会看到缓存的响应。

我的网站的入口点是localhost/site/index.php

按照您的建议,提供/site子目录是可见URL的一部分,则不需要网站根目录中的其他.htaccess文件(如@anubhava的回答)。无论哪种方式,您都不需要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。