Col*_*ams 5 apache .htaccess mod-rewrite
我在谷歌和StackOverflow周围挖掘高低,试图找出我的问题,尝试无数的解决方案,但没有任何完全有效.
我想将服务器上主域的Web根目录移动到子目录.我目前用于Web根目录的服务器路径:
/home/user/public_html/MyWebFilesHere
Run Code Online (Sandbox Code Playgroud)
我想要的是:
/home/user/public_html/subdir/MyWebfilesHere
Run Code Online (Sandbox Code Playgroud)
当我浏览到mydomain.com时,应该没有明显的区别(即重定向后"subdir"不可见).
不幸的是,由于我在共享主机上并且无法访问Apache配置文件等,因此我仅限于使用.htaccess文件执行此操作.:(
我目前在public_html中的.htaccess中拥有的是:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteRule ^(.*)$ /subdir/$1 [L]
Run Code Online (Sandbox Code Playgroud)
这成功地将所有查询重定向到子目录,但是这是一个非常奇怪的问题.如果我去
mydomain.com/Contact/
Run Code Online (Sandbox Code Playgroud)
它工作得很好,将查询重定向到路径/ subdir/Contact /但只留下地址栏.如果我去
mydomain.com/Contact
Run Code Online (Sandbox Code Playgroud)
(注意缺少尾随'/'),地址栏中显示的是
mydomain.com/subdir/Contact/
Run Code Online (Sandbox Code Playgroud)
因为"subdir"显示,这不是我想要的.
有关我实际网站上的工作示例,请尝试浏览
colincwilliams.com/Contact/
Run Code Online (Sandbox Code Playgroud)
和....相比
colincwilliams.com/Contact
Run Code Online (Sandbox Code Playgroud)
你们有没有关于如何使用和不使用尾部斜线进行静默工作的想法?
这可能发生,因为mod_dir(如果目录的请求缺少一个尾部斜杠同样的事情,可自动将浏览器重定向模块与尾部斜杠.见在mod_dir DirectorySlash指令
发生的事情是:
mydomain.com/Contact/Contact它不是目录/Contact被重写/subdir/Contact并在内部重定向/subdir/Contact是一个目录并且缺少尾部斜杠,因此它将浏览器重定向到mydomain.com/subdir/Contact/您可以添加DirectorySlash off.htaccess来关闭重定向的mod_dir.但是,如果您希望目录具有尾部斜杠,则可以为其添加单独的条件.根据您已有的内容,我们可以将其扩展为:
RewriteEngine on
# Has a trailing slash, don't append one when rewriting
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{THE_REQUEST} ./\ HTTP/1\.[01]$ [OR]
# OR if it's a file that ends with one of these extensions
RewriteCond %{REQUEST_URI} \.(php|html?|jpg|gif|css)$
RewriteRule ^(.*)$ /subdir/$1 [L]
# Missing trailing slash, append one
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{THE_REQUEST} [^/]\ HTTP/1\.[01]$
# But only if it's not a file that ends with one of these extensions
RewriteCond %{REQUEST_URI} !\.(php|html?|jpg|gif|css)$
RewriteRule ^(.*)$ /subdir/$1/ [L]
Run Code Online (Sandbox Code Playgroud)
注:我换!^/mydomain/到!^/subdir/,想通这是一个错字,因为没有它,mod_rewrite的将环内无限(FOO - > /子目录/富- > /子目录/子目录/富- > /子目录/子目录/子目录/富等).如果我弄错了,你可以改回来.
编辑:看看我添加的RewriteCond匹配\.(php|html?|jpg|gif|css).这些是在不添加尾部斜杠的情况下传递的文件扩展名.您可以添加/删除以满足您的需求.
| 归档时间: |
|
| 查看次数: |
4466 次 |
| 最近记录: |