我有一个包含以下内容的.htaccess文件,删除了我所有网站页面的.html文件扩展名。
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_HOST} ^(www\.)?james-lee\.io$ [NC]
RewriteRule ^$ https://www.james-lee.io%{REQUEST_URI} [R,L]
我的链接现在看起来像www.james-lee.io/resume/resume,之前它们看起来像www.james-lee.io/resume/resume.html。我想删除文件夹名称,因此该文件夹的名称不会被文件名减去.html复制,最终结果看起来像www.james-lee.io/resume。
我见过类似的问题但不完全是我要找的。 p>
答案 0 :(得分:0)
所以我完成了这项任务! 试试这段代码:
RewriteCond %{REQUEST_URI} ^/(.*)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%1 -d
RewriteCond %{DOCUMENT_ROOT}/%1/%2 -f
RewriteCond %1::%2 ^(.*)::\1$
RewriteRule ^(.*)$ /%1 [R,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/(.*)$ /$1/$1 [END]
现在我尝试解释这个规则。
但是如果文件夹==文件,重定向将始终到目录。 所以,接下来我检查一下,如果重定向结果是现有的dir并更改链接。
请求示例: http://yourdomain/test/test
(这将重定向到http://yourdomain/test,但会引用原始链接)
我希望,我能清楚解释,但如果您有任何疑问,我很乐意回答。
感谢您有兴趣的任务!
P.S。另见%N backreference inside RewriteCond
<强>已更新即可。你的htaccess必须如下:
RewriteEngine on
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_HOST} ^(www\.)?james-lee\.io$ [NC]
RewriteRule ^$ https://www.james-lee.io%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_URI} ^/(.*)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%1 -d
RewriteCond %{DOCUMENT_ROOT}/%1/%2\.html -f
RewriteCond %1::%2 ^(.*)::\1$
RewriteRule ^(.*)$ /%1 [R,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/(.*)$ /$1/$1.html [END]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]