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***
  • 其他领域
  • 其他领域
  • 其他领域
我有两个目标: 1。)root.htaccess文件应确保在进入
www.my-website.com
时,我的主域即
/my-website
自动运行/执行。由于我有一个多域ftp服务器,我需要指定它。这已经奏效了

2。)在我的子目录
/mywebsite
中,我需要一些不同的规则,特别是关于更好的url设计和省略.php扩展

  • 所以在
    /mywebsite
    中,我想忽略所有
    .php
    后缀
  • 我想“伪造”目录,比如
    /jobs
    /projects
    ,它们实际上不是目录,而是php文件本身
这就是我到目前为止所拥有的,感谢@anubhava在这方面的贡献

DocumentRoot/.htaccess: /我的网站/.htaccess: 然而,我现在在使用它时遇到了一个问题,即在
我的网站
中,没有尾部
的链接将无法工作。我希望我的链接像
/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]