使用htaccess隐藏文件扩展名后链接无法正常打开

时间:2015-06-15 10:13:24

标签: javascript php apache .htaccess

我使用了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/

没关系,它按预期进入页面。

现在我如何才能使链接正常工作?

2 个答案:

答案 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}}