Apache 多域设置上的htaccess:其他域不';行不通
我的服务器上有一个多域设置,看起来像这样…这是一个结构模型:Apache 多域设置上的htaccess:其他域不';行不通,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我的服务器上有一个多域设置,看起来像这样…这是一个结构模型: .htaccess ***我的网站 .htaccess index.php projects.php jobs.php some-project.php 另一个-project.php some-job.php 另一个-job.php*** 其他领域 其他领域 其他领域 我有两个目标: 1。)root.htaccess文件应确保在进入www.my-website.com时,我的主域即/my-website自动运行/执行。由于我
- .htaccess
- ***我的网站
- .htaccess
- index.php
- projects.php
- jobs.php
- some-project.php
- 另一个-project.php
- some-job.php
- 另一个-job.php***
- 其他领域
- 其他领域
- 其他领域
www.my-website.com
时,我的主域即/my-website
自动运行/执行。由于我有一个多域ftp服务器,我需要指定它。这已经奏效了
2。)在我的子目录/mywebsite
中,我需要一些不同的规则,特别是关于更好的url设计和省略.php扩展
- 所以在
中,我想忽略所有/mywebsite
后缀.php
- 我想“伪造”目录,比如
/jobs
,它们实际上不是目录,而是php文件本身/projects
我的网站中,没有尾部的链接将无法工作。我希望我的链接像/projects
一样工作,但在我的网站上运行/exectute/projects.php
。然而,这在目前不起作用,我得到一个404。
我还希望/projects/some project
运行/执行/some project.php
(其中projects
目录实际上不存在),这也不起作用,也是404
总而言之。
- 我所有的域名现在都可以使用了!所以我的多域设置是save and handled
- 然而,在
/mywebsite
中,我希望所有链接都能在不拖尾.php的情况下工作,并且使用这个“伪造”目录
所以现在这是可行的
- www.my-website.com//有效
- www.other-domain.com//有效
- www.my-website.com/projects//如果没有trail.php,则无法工作
- www.my-website.com/projects.php//工作(运行projects.php)
- www.my-website.com/projects/some project//不工作(应该运行some project.php)
- www.my-website.com/projects/some-project.php//工作(运行some-project.php)
拥有root.htaccess,如下所示:
RewriteEngine On
RewriteBase /
## COMMENT out these 2 rules
# RewriteRule ^projects/(.+?\.php)$ /$1 [L,NC]
# RewriteRule ^jobs/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^(downloads/.+)/?$ assets/$1 [L,NC]
# add .php extension
RewriteCond %{DOCUMENT_ROOT}/my-website/$1\.php -f [NC]
RewriteRule ^(?:[^/]+/)?([^/]+)/?$ my-website/$1.php [L]
RewriteCond %{HTTP_HOST} ^(www\.)?my-website\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/my-website/ [NC]
RewriteRule ^(.*)$ my-website/$1 [L]
# add .php extension 2
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(?:[^/]+/)?([^/]+)/?$ $1.php [L]
/我的网站/.htaccess:
DocumentRoot/.htaccess:
RewriteBase /
RewriteRule ^projects/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^jobs/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^(downloads/.+)/?$ assets/$1 [L,NC]
# add .php extension for REQUEST_FILENAME existing in /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
# Check if REQUEST_URI is existing as file or directory in /my-website
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -d
RewriteRule ^(.*)$ /my-website/$1 [L]
# Check if REQUEST_URI is existing as file.php in /my-website
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ /my-website/$1 [L]
RewriteEngine On
RewriteBase /my-website/
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
/我的网站/.htaccess:
RewriteBase /
RewriteRule ^projects/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^jobs/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^(downloads/.+)/?$ assets/$1 [L,NC]
# add .php extension for REQUEST_FILENAME existing in /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
# Check if REQUEST_URI is existing as file or directory in /my-website
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -d
RewriteRule ^(.*)$ /my-website/$1 [L]
# Check if REQUEST_URI is existing as file.php in /my-website
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ /my-website/$1 [L]
RewriteEngine On
RewriteBase /my-website/
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
尝试注释root.htaccess的最后4行,然后输入:http://domain.com/my-website/test
以查看该链接是否有效。@matt您是否有权访问主配置文件(httpd.conf或在您的安装程序中如何调用该文件)?通过此链接,我可以获得一个404,用于www.my-website.com
,但是www.my-website.com/projects
起作用,然而www.my-website.com/projects/some project
又起不了作用。这条规则不包括它。您能清楚地知道www.my-website.com
的文档根在哪里吗?是我的网站还是/?这不回答我的问题!您想将所有内容从documentroot重写到/my网站吗?我想将我的多域服务器配置为在浏览www.my-wesbite.com
时自动运行/my website
子目录。这是交易的一部分。第二个不同的部分是,在/mywebsite
目录中,为了更好地理解,我想省略.php扩展名并“伪造”一些目录。例如,我链接到/projects/some project
事件,尽管projects
本身不是一个目录,而是一个php文件。再次查看我问题中的更新。仍在手机上,请原谅打字错误。所以当请求为/projects/someproject时,那么/projects应该被忽略,但如果请求仅为/projects,那么它应该加载projects.php?如果请求是为了./projects/some project/abcd怎么办?没错。但是,/projects/some project/abcd
当前不存在,但如果它也能工作,则会很好,但必须不能。这似乎是可行的,将在我回到计算机后立即更新我的答案。抱歉,但不起作用。和以前一样<代码>/projects/some project
不起作用-404。没什么区别。/my-website/dir中的.htaccess是否仍然相同?在这里你可以看到我当前上传的root.htaccess文件…
RewriteEngine On
RewriteBase /my-website/
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]