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

标签 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内,我已经给出了affiliate_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/

没关系,它会按预期转到页面。

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

最佳答案

在此代码之后:

RewriteRule ^([^\.]+)/$ $1.php 

输入下面的代码

RewriteRule afiliate_login$   afiliate_login.php [L]

基本上意味着任何到达 affiliate_login 的请求都将显示来自 affiliate_login.php

的数据

您遇到这个问题是因为在您的 anchor 标记中您使用的是相对网址。由于您的网址看起来像这样,没有文件扩展名,例如 example.com/afiliate/afiliate_login/affiliate_login/ 也将被视为目录,并且 html 认为 anchor 标记位于 affiliate_login/ 中,但实际上它不存在,因此您会收到 404 错误。

关于javascript - 使用 htaccess 隐藏文件扩展名后链接无法正确打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842577/

相关文章:

javascript - Primefaces 5.2 日历未定义

javascript - 传递 id 的 Angular 路由不起作用

php - 在插入时获取一张表的 auto_increment 值的最佳方法

java.lang.NoClassDefFoundError : org/apache/http/ssl/TrustStrategy, 尽管它存在于类路径中

apache - 带有磅的 Varnish 和 SSL

java - 在 apache 中自定义 Web 应用程序根上下文

Javascript 用模式替换参数

php - Javascript 事件 - 将值发送到数据库

javascript - 使用 ajax 和 php 加速 select2

javascript - 单击提交时的 window.onbeforeunload 警报