作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在谷歌上搜索堆栈溢出,试图找出这个问题,但没有任何乐趣,并且无论我尝试什么,都会不断出现错误。
我目前正在使用此代码重写地址以删除扩展名,我不久前从 SO 帖子中获得了它,用于简单的网站:
RewriteEngine on
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.phtml [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.phtml -f
RewriteRule ^ %{REQUEST_URI}.phtml [L]
(我使用 phtml 文件作为 ui 文件,使用 php 作为后台文件,因此是第二个 block )
这对我来说效果很好,但现在我在一个网站上,我想将 get 变量提供给页面以进行书签等,并且不希望地址类似于 www.website.com/page ?var=0
我已经设法让我的测试网站使用另一个SO帖子中的代码加载www.website.com/page/
,但只有当我输入该网址时,如果我去它就不会重写到 page.html 并且不会加载附加文件 css、js (我理解这是因为文件有相对路径) 编辑: 我现在明白这与 -f || 有关。 !-F;代码:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
我可以接受是否有尾随斜杠,但我确实想在存在变量时添加它,例如 page?var=0
到 page/var=0
没有图像、js 和 css 停止。当然,如果都可以用斜杠那就更好了。
谢谢
编辑:当网站和 .htaccess 位于子文件夹中时也需要工作,例如:mysite.com/example/websitedemonstration/page
最佳答案
这个似乎对我来说效果很好,试一试:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.(html|phtml) [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]*)/?$ $1.html [L]
# To internally forward /dir/foo to /dir/foo.phtml
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.phtml -f
RewriteRule ^([^/]*)/?$ $1.phtml [L]
关于apache - .htaccess rewritecond 和规则无法找出末尾的额外斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839693/
我是一名优秀的程序员,十分优秀!