首先关闭 - 抱歉再次提出这个问题。它似乎得到了一百万次回答 - 但我仍然无法让我的.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]
任何(详细的)帮助或说明都将受到高度赞赏!
答案 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的链接系统生成的?