使用.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>
请执行什么操作或添加到代码中,以使这些链接正常。
答案 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堆栈上查看我的答案,其中讨论了类似的问题: