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