实际上我想运行~name/how
而不是~name/how.php
。
我在.htaccess中进行了以下更改:
# If the requested URI does not contain a period in the final path-part
RewriteCond %{REQUEST_URI} !(.[^./]+)$
# and if it does not exist as a directory
RewriteCond %{REQUEST_fileNAME} !-d
# and if it does not exist as a file
RewriteCond %{REQUEST_fileNAME} !-f
# then add .html to get the actual filename
RewriteRule (.*) $1.php [L]
但它会以:
运行~name/~name/how
在每个链接点击它将在URL ex中添加~name
。 http://ip/~name/~name/~name/serach
。
你能告诉我.htaccess有什么问题吗?
答案 0 :(得分:1)
您使用的是相对而非绝对路径。你的网页现在认为你在路径〜名字/。您可以在页面中设置<base href>
。
你可以通过使用'DirectoryIndex index.php'来映射/以及/whatever/index.php来简化这个
这可能有所帮助:How to use apache's mod_rewrite rewriterule without changing relative paths
编辑:简短回答。你应该考虑使用菜单的绝对路径和php包括,以防止更深入的嵌套问题。您的相对路径仅在您有两个级别时才有效(即〜laborfa2 / search /)坦率地说,你的链接很乱,所以你会感到困惑。我强烈建议您创建一个非常简单的测试站点,以便正确组织路径。根据需要使用绝对路径和相对路径。删除基础href,因为它只是让你感到困惑。一旦你运行它再次尝试重写,请记住,如果通过重写改变了路径深度,你的相对路径可能需要更新。
答案 1 :(得分:0)
这是一个URL解决问题:相对URL始终在基本URL上解析,该基本URL是当前资源的URL(如果没有其他说明)。因此,如果您在/~name/foo
上并且指向~name/bar
的链接(这只是一个相对网址路径!),则会将其解析为/~name/~name/bar
。但是,如果您指向/~name/bar
,它将无法解析,因为它已经是绝对URL路径。
因此,您可以通过使用绝对网址路径(以/
开头)或更改基本网址来避免这种情况(请参阅BASE HTML element)。但后者会影响任何相对URL引用,而不仅仅是那些以相对URL路径开头的引用。