2012-07-19 101 views
1
RewriteEngine On 
RewriteBase /city_name 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /city_name/index.php?page=$1 [L] 

所以我有这个工作,所以如果我做domain.com/calgary/它会正确地从数据库中读取。Apache mod_rewrite不会读取文件夹

但是,如果我做domain.com/calgary/test.php文件夹读取不正确,因为它认为文件在/卡尔加里/即使它是一个虚拟目录。

所以我在/ CITY_NAME /文件夹中的.htaccess目录可能寻求帮助,这样它会读取文件从/ CITY_NAME /目录.PHP代替/卡尔加里/(虚拟)

+0

应将'domain.com/calgary/test.php'重写为? – zerkms 2012-07-19 22:42:14

+0

我想要地址来启动domain.com/calgary/test.php,但test.php将存在于domain.com/city_name/中,其中包含由/ calgary /(或城市ID)动态生成的所有城市文件。 @zerkms – Jordie 2012-07-19 22:49:10

+0

那么,应该把'domain.com/calgary/test.php'改写成什么确切的地址?! 'mod_rewrite'什么都不做,只是将一个字符串重写为另一个字符串 – zerkms 2012-07-19 23:21:10

回答

1

尝试添加这些规则:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /([^\./]+)\.php$ 
RewriteCond %{DOCUMENT_ROOT}/city_name/%1.php -f 
RewriteRule ^(.*)/([^\./]+)\.php$ /city_name/$2.php?page=$1 [L] 
+0

不是找到 在此服务器上找不到请求的URL /calgary/test-page.php。但是,当我做/卡尔加里/它会为我吐出城市细节。 – Jordie 2012-07-20 00:05:51

+0

@Jordie是否存在'/ city_name/test-page.php'文件?这就是这行代码所检查的:'RewriteCond%{DOCUMENT_ROOT} /city_name/%1.php -f',如果服务器的文档根目录中没有'/ city_name/test-page.php'则条件失败。 (请注意,如果它是test-page.php是符号链接,则它可能不起作用)。 – 2012-07-20 00:10:27

+0

是/city_name/test-page.php是否存在。它就是那个文件夹。但是,请记住* city_name *是一个被屏蔽的文件夹。用户不应该看到* city_name *,而是看到* calgary */my-profile.php。但服务器正在* calgary *文件夹中查找文件my-profile.php或test-page.php。所以需要一种方式来重定向,而不会丢失* calgary *文件夹。那有意义吗? /目录中的.htaccess文件具有上述代码。你的例子,我会把它放在我的上面的代码下面/替换我的上面,或者我将它放在/ city_name /文件夹。 (mod_rewrite初学者) – Jordie 2012-07-20 02:01:31