通过子目录

时间:2017-03-04 08:29:23

标签: .htaccess mod-rewrite

首先关闭 - 抱歉再次提出这个问题。它似乎得到了一百万次回答 - 但我仍然无法让我的.htaccess工作。

问题: public_html 中,我们有一个工作网站和一个.htaccess文件。在名为“登台”的子目录中,我们运行了另一个网站,该网站完全独立于public_html中的网站。如何使用.htaccess处理子目录以删除.html扩展名?我们在一个带有cPanel,共享主机(Hostgator)的apache服务器上。

.htaccess in public_html

# -- concrete5 urls start --
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]


</IfModule>
# -- concrete5 urls end --

<IfModule mod_headers.c>    
Header set Access-Control-Allow-Origin *
</IfModule>
#Header set Access-Control-Allow-Origin *

.htaccess in staging

RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [NC,L]

任何(详细的)帮助或说明都将受到高度赞赏!

2 个答案:

答案 0 :(得分:1)

保持staging/.htaccess,但删除RewriteBase /,因为这会导致在$1.html而不是/$1.html搜索相对替换路径/staging/$1.html。< / p>

  

RewriteBase指令指定用于替换相对路径的每个目录(htaccess)RewriteRule指令的URL前缀。

您也不需要NC|nocase,因为该模式不包含任何“字母”字母。

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L]

答案 1 :(得分:0)

似乎你可以使用这个

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

在子目录中或修改父htaccess。 当我在http://htaccess.madewithlove.be/进行测试时,它可以正常工作。

您的网页是真实的静态html网页还是html地址是由某些CMS的链接系统生成的?