多域设置中的htaccess:其他域名不起作用

时间:2014-12-23 09:27:26

标签: apache .htaccess mod-rewrite redirect

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

  • 的.htaccess
  • ***我-网站
    • 的.htaccess
    • 的index.php
    • projects.php
    • jobs.php
    • 一些-project.php
    • 另一个-project.php
    • 一些-job.php
    • 另一个-job.php ***
  • 其他域
  • 其他域
  • 其他域

我有两个目标:

1。)根.htaccess文件应确保在输入/my-website时自动运行/执行我的www.my-website.com主域。由于我有一个多域ftp服务器,我需要指定它。这已经有效了。

2。)在我的子目录/my-website中,我需要一些不同的规则,尤其是关于更好的网址设计和省略.php扩展名。

  • 所以在/my-website我想忽略所有.php个后缀。
  • 我想"假"像/jobs /projects这样的目录实际上不是目录而是php文件本身。

这是我迄今为止感谢@anubhava的thread

的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]

/my-website/.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一样工作,但在我的网站上运行/ exectute /projects.php。然而,目前这不起作用,我得到了404。 我还希望/projects/some-project能够运行/执行/some-project.phpprojects目录实际上并不存在),这也不起作用,也是404。

所以,总结一下。

  • 我的所有域名现在都有效!所以我的多域设置是save and handeld。
  • 但是在/my-website内部,我希望所有链接都能正常工作,而不会使用.php和#34; faked"目录

所以现在这个有用......

  • 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)

2 个答案:

答案 0 :(得分:2)

像这样拥有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]

/my-website/.htaccess:

RewriteEngine On
RewriteBase /my-website/

# add .php extension
RewriteCond %{DOCUMENT_ROOT}/my-website/$1\.php -f [NC]
RewriteRule ^(?:[^/]+/)?([^/]+)/?$ $1.php [L]

答案 1 :(得分:0)

的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]

/my-website/.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]