我使用了ht-access来隐藏.php
文件扩展名。在.htaccess
文件中,我的代码是:
# Apache Rewrite Rules
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php
# End of Apache Rewrite Rules
</IfModule>
它很好地隐藏了.php
文件扩展名。 但问题是,href
属性中的链接无法正常打开。
我有两个文件:
public_html/afiliate/product_details.php
public_html/afiliate/afiliate_login.php
在 product_details.php
内部,我已经提供了 afiliate_login.php
的链接
<a href="afiliate_login.php" target="_blank">Log in</a>
点击登录我应该转到
这样的页面
example.com/afiliate/afiliate_login/
但它需要我
example.com/afiliate/product_details/afiliate_login/
因此出现404错误
再次注意,如果我手动输入此URL
example.com/afiliate/afiliate_login/
没关系,它按预期进入页面。
现在我如何才能使链接正常工作?
答案 0 :(得分:2)
在此代码之后:
RewriteRule ^([^\.]+)/$ $1.php
将以下代码
RewriteRule afiliate_login$ afiliate_login.php [L]
基本上意味着来到afiliate_login
的任何请求都会显示来自afiliate_login.php
的数据
你遇到了这个问题,因为你的锚标签中你使用的是相对网址。由于您的网址看起来没有像example.com/afiliate/afiliate_login/
这样的文件扩展名,affiliate_login/
也会被视为目录而html认为锚标记位于affiliate_login/
但实际上它那里不存在404错误。
答案 1 :(得分:1)
以前,浏览器将product_details/
视为文件。但现在它是一个文件夹,因为它是<a href="../afiliate_login.php" target="_blank">Log in</a>
此处提供的一个选项是更新此类链接
<a href="/afiliate_login" target="_blank">Log in</a>
但它总是建议像下面的链接
{{1}}