我有一个太大的网站,无法编辑样式和文件的URL,这会花费太多时间。
css
js
imágenes
我正在测试在本地主机上工作
localhost/project/index.php
我想要的友好网址:
localhost/project/index/
如果用户像这样修改URL:localhost/project/index
重定向到:localhost/project/index/
将任何修改后的不带斜杠的URL重定向到带有斜杠的URL
localhost/project/online/video/hd/free
localhost/project/online/video/hd/free/
来自普通网址
localhost/project/online.php
像这样显示它:
localhost/project/online/video/hd/free/
我试过这些例子: .htaccess
注意:在前几个示例中,
.htaccess
stylescss
和 files显示没有任何问题。js
imágenes
#Eliminar la extensión php/html
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
#RewriteRule ^([a-zA-Z0-9-/]+)$ index.php
RewriteRule ^online-video-en-hd-gratis$ online.php [L,NC,QSA]
结果:
http://www.example.com/index
http://www.example.com/online-video-en-hd-gratis
问题是在使用斜杠时使用尾随斜杠
/
或几个附加/../
斜杠,样式丢失css
,在其他文件js
中,imágenes
.
示例一:(添加尾部斜杠/
)
http://www.example.com/index/
示例二:(添加多条/
)
RewriteEngine on
RewriteRule ^online/video/hd/aventuras/$ online.php [L,NC,QSA]
结果:
http://www.example.com/online/video/hd/aventuras/
重要的:
我查看了这个网站http://crazycafe.net/demos/seo/和它的源代码,样式css
保持如下:没有向样式及其文件<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
添加绝对 url,它们可以毫无问题地加载。css
js
imagenes
我在 Inlges上的Stack Overflow上发现了这个问题,如何保留 CSS 样式。
他的一些例子是:
RewriteRule ^images/(.+)?$ images/$1 [NC,L]
RewriteRule ^js/(.+)?$ js/$1 [NC,L]
RewriteRule ^topnav/(.+)?$ topnav/$1 [NC,L]
RewriteRule ^common-style\.css$ common-style.css
RewriteRule ^jquery\.js$ jquery.js
RewriteRule ^script/js/(.+)?$ script/$1 [NC,L]
但我真的不太明白.htaccess的秘密
我的文件目录(文件夹)是:
assets/css/style.css
assets/js/app.js
assets/fonts/icons/image.png
assets/fonts/ttf/roboto.ttf
assets/img/system/image.png
assets/img/logo.png
现在我的问题是?
可以直接从.htaccess文件中修复这些错误,而无需将文件路径css
、js
、imágenes
更改为(绝对)路径。
我希望这个问题不会被认为太长,请将我的问题编辑为MCVE建议
解决方案可能是将最后一级子目录中存在的所有内容直接重定向到这些文件,而不是尝试从它们的真实路径(在友好 URL 中生成斜杠使用的路径)获取它们或将它们发送到 PHP(如果您使用通用重定向规则)。
以下是
.htaccess
您应该使用的规则来检测位于名为“css”、“js”、“fonts”或“img”的目录之后的任何“assets”路径:我做了以下测试来验证它的正确操作:
http://localhost/project/online/video/hd/free/
访问名为online.php
.http://localhost/project/online/video/hd/free/assets/css/style.css
会导致发送一个标头Location: http://localhost/project/assets/css/style.css
,将浏览器重定向到现有资源。规则因包含在任意目录中而变得复杂。它们可以在任何需要的地方手动输入,以便将来更容易迁移或更改目录,您可以轻松地在开头定义基本路径
.htaccess
,从而避免在文件中的多个位置更改它(并且可能,忘记任何更改)。如果规则在根目录中,一切都会变得更容易(这就是我之前的规则所基于的),因为我们使用了变量
%{DOCUMENT_ROOT}
而没有添加任何额外的东西。我们可以使用%{ENV:BASE}
,但是在重定向中我们还必须添加相同的字符串,并且我们不再有任何可以帮助我们的 Apache 环境变量(或者至少我不知道)。我希望现在解决方案对您有用。
我忘记了第二个选项,虽然它会产生误报,因为我不能(我不知道)检查文件的存在,但为了尽量减少它们,我使规则更严格: