我怎样才能使htaccess重写不影响我页面上的其他URL链接

时间:2018-10-28 10:56:29

标签: php .htaccess redirect codeigniter-htaccess

使用.htaccess重写我的URL之后,我现在面临另一个挑战。 我的detail.php页上的所有其他链接不再正确。

示例:

这应该是正常的网址:

http://localhost/FashionSite/about-us.php

但是它现在显示出来:

http://localhost/FashionSite/product/Coporate/polo-and-trouser/about-us.php

detail.php页上的所有URL链接都在发生这种情况。

下面是我的.htaccess代码,它运行良好,但是在detail页面上,所有其他URL都会更改:

<IfModule mod_rewrite.c> 
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(admin|user)($|/) - [L]
RewriteRule ^(slide|user)($|/) - [L]
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^product/(.*)/(.*)/ detail.php?ID=$1&url=$2 [L]
RewriteRule ^product/[^/]+/[^/]+(/.+)$ http://localhost/FashionSite/$1  [L]
</IfModule>

请执行什么操作或添加到代码中,以使这些链接正常。

1 个答案:

答案 0 :(得分:1)

您似乎正在使用相对 URL链接到您的页面。 HTML中的任何相对链接都是相对于客户端URL的。如果您要重写URL,那么您的链接现在将相对于重写的URL。

例如,如果浏览器当前正在显示URL http://localhost/FashionSite/product/Coporate/polo-and-trouser/detail.php,则格式为<a href="about-us.php">的锚点自然会相对于该URL,浏览器会将其解析为http://localhost/FashionSite/product/Coporate/polo-and-trouser/about-us.php

您需要更改内部链接以使用相对于根的(以斜杠开头)或绝对URL(以方案+主机名)。例如:<a href="about-us.php">应该更改为<a href="/FashionSite/about-us.php">(如果所有内容都在/FashionSite子目录中。

或者,在页面的base中设置head标签,该标签向浏览器指示所有相对链接应为相对的URL。例如:

<base href="http://localhost/FashionSite/index.php">

但是,base标签并非没有警告。例如<a href="#top"形式的页内锚点现在也与此基本URL相关。最好将所有链接更改为相对于根(或绝对)。

在Pro Webmasters堆栈上查看我的答案,其中讨论了类似的问题: