apache - 多域设置上的 htaccess : other domains don't work

标签 apache .htaccess mod-rewrite redirect

我的服务器上有一个多域设置,看起来像这样……这是结构模型:

  • .htaccess
  • ***我的网站
  • .htaccess
  • index.php
  • 项目.php
  • 工作.php
  • some-project.php
  • 另一个-project.php
  • some-job.php
  • another-job.php***
  • 其他域
  • 其他域
  • 其他域

  • 我有两个目标:

    1.) 根 .htaccess 文件应该确保我的主域是 /my-website输入 www.my-website.com 时自动运行/执行.由于我有一个多域 ftp-server,我需要指定它。那已经在起作用了。

    2.) 在我的子目录 /my-website我需要一些不同的规则,尤其是关于更好的 url 设计和 .php 扩展名的省略。
  • 所以在 /my-website我想忽略所有.php后缀。
  • 我想“伪造”目录,例如 /jobs /projects这实际上不是目录,而是 php 文件本身。

  • 到目前为止,这就是我在此 thread 中感谢 @anubhava 所拥有的.

    DocumentRoot/.htaccess:
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^projects/(.+?\.php)$ /$1 [L,NC]
    RewriteRule ^jobs/(.+?\.php)$ /$1 [L,NC]
    RewriteRule ^(downloads/.+)/?$ assets/$1 [L,NC]
    
    # add .php extension
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ $1.php [L]
    
    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]
    

    /我的网站/.htaccess:
    RewriteEngine On
    RewriteBase /my-website/
    
    # add .php extension
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/my-website/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ $1.php [L]
    

    但是我现在在使用这个时遇到了问题,在 my-website 中没有尾随的链接 .php不会工作。我希望我的链接像 /projects 一样工作但运行/执行 /projects.php在我的网站。但是,这目前不起作用,我收到了 404。
    我也想要/projects/some-project运行/执行 /some-project.php (其中 projects 目录实际上不存在)也不起作用,也是 404。

    所以,总结一下。
  • 我所有的域现在都可以使用了!所以我的多域设置是保存和处理。
  • 然而里面/my-website我希望所有链接都可以在没有尾随 .php 和这个“伪造”目录的情况下工作

  • 所以现在这有效......
  • www.my-website.com //有效
  • www.other-domain.com //有效
  • www.my-website.com/projects //如果没有尾随 .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:
    RewriteEngine On
    RewriteBase /my-website/
    
    # add .php extension
    RewriteCond %{DOCUMENT_ROOT}/my-website/$1\.php -f [NC]
    RewriteRule ^(?:[^/]+/)?([^/]+)/?$ $1.php [L]
    

    关于apache - 多域设置上的 htaccess : other domains don't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27617487/

    相关文章:

    .htaccess - 用于 Opencart 搜索页面 URL 的 htaccess mod_rewrite

    php - 多站点 Wordpress、SSL 和 htaccess 以将子文件夹用作根目录

    php - 启用了 MultiViews 的 Apache Clean-Urls

    regex - HT 访问拼图!为什么 "?"在一个 Rewrite 语句中有效,而在另一条语句中无效?参见示例

    java - 将 Apache 链接到具有多个域的 Tomcat

    python - 在共享虚拟主机服务器上使用 wsgi 和 virtualenv 部署 Django 项目,无需 root 访问权限

    apache - 使用.htaccess重定向主域但不重定向某些子域

    wordpress - 如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点

    java - 尝试在 OfBiz 中保存任务时收到 FK 违规错误

    apache - 更改 BIND DNS 服务器后应用配置时出现 Webmin 错误