如何解决如何使用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.php
,RewriteBase
的前缀将变为/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 举报,一经查实,本站将立刻删除。