重定向到localhost

时间:2015-10-09 20:26:17

标签: .htaccess mod-rewrite

我有一个webproject保存在域“example.com”的“base”文件夹中,其中包含main.php和几个子文件夹。 下面代码的第二部分将所有请求(main.php本身和page404.php除外)重定向到此main.php并移交最初请求的网址在变量“path”

此外,还有第一部分将baseurl页面的所有请求重定向到子文件夹“folder1”

的最终要求
  

www.example.com/somepage.php

将导致

  

example.com/main.php?path=www.example.com/的 folder1中 /somepage.php

(对其他子文件夹的请求只能重定向到main.php。所以www.example.com/somefolder/somepage.php会导致example.com/main.php?path=www.example.com/somefolder/somepage.php - 而不添加“folder1”。)

下面的代码实际上做了我想要的事情:

ErrorDocument 404 /page404.php
Options -Indexes
DirectoryIndex index.php

<IfModule mod_rewrite.c>
RewriteEngine on

#first part: redirect to folder1/
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/*
RewriteCond %{REQUEST_URI} !^page404*
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ folder1/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ index.php 

#second part: redirect to main.php 
RewriteCond %{REQUEST_FILENAME} (.*)\.php [NC]
RewriteCond %{REQUEST_URI} !main\.php
RewriteCond %{REQUEST_URI} !page404\.php
RewriteRule ^([^?]*)$ /main.php?path=$1 [NC,L,QSA]
</IfModule>

但我有两个问题:

附带问题:我觉得实际重定向到“folder1”是复杂的方法(即使它有效),当我只想将“folder1”添加到路径变量中时调用基本文件夹的文件。你能告诉我更好的方法吗?

主要问题:我在localhost上有相同的项目,其中主文件夹名为“folder1”,其中包含文件夹“folder1”。因此 htttp://localhost/folder1/somepage.php 的请求将导致 htttp://localhost/folder1/main.php?path = htttp:// localhost / folder1 / folder1 /somepage.php (我用“htttp”替换“http”以避免SO的自动链接识别) - 我如何更改上面的代码才能拥有它在“localhost / folder1”场景中工作?

1 个答案:

答案 0 :(得分:1)

这个东西可以简化:

ErrorDocument 404 /page404.php
Options -Indexes
DirectoryIndex index.php
RewriteEngine on

# ignore main.php, page404.php OR any files/directory for any rules below
RewriteCond %{REQUEST_URI} ^/(main|page404)\.php
RewriteRule ^ - [L]

#first part: /folder1/path
RewriteRule ^([^/]+?\.php)$ main.php?path=folder1/$1 [L,QSA]

#second part: rewrite to main.php 
RewriteRule ^(.+?\.php)$ main.php?path=$1 [L,QSA]