的.htaccess / mod_rewrite的

时间:2009-05-23 05:48:26

标签: .htaccess mod-rewrite

实际上我想运行~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中添加~namehttp://ip/~name/~name/~name/serach

你能告诉我.htaccess有什么问题吗?

2 个答案:

答案 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路径开头的引用。